我有一个抽象的MappedSuperClass,另一个叫做#34; User"这是MappedSuperClass的子节点。问题是,学说没有生成User类的属性。只有MappedSuperClass的属性。为什么呢?
<?php
namespace IsCoconut\Models;
use DateTime;
use Doctrine\ORM\Mapping\Column;
use Doctrine\ORM\Mapping\GeneratedValue;
use Doctrine\ORM\Mapping\Id;
use Doctrine\ORM\Mapping\MappedSuperclass;
/** @MappedSuperclass */
abstract class BaseEntity
{
/**
* @var int
* @Id
* @Column(type="integer")
* @GeneratedValue(strategy="AUTO")
*/
protected $id;
/** @Column(type="boolean")
* @var boolean
*/
protected $deleted = false;
/** @Column(name="creation_date_time", type="datetime")
* @var DateTime
*/
protected $creationDateTime;
protected function __construct()
{
$this->creationDateTime = new DateTime();
}
}
这是我的实体,应该由Doctrine
在数据库中生成<?php
namespace IsCoconut\Models;
use Doctrine\ORM\Mapping as ORM;
use Doctrine\ORM\Mapping\Entity;
use Doctrine\ORM\Mapping\Table;
/**
* @Entity
* @Table(name="users")
*/
class User extends BaseEntity
{
/**
* @var string
* @ORM\Column(type="string", length=512)
*/
private $forename;
/**
* @var string
* @ORM\Column(type="string", length=512)
*/
private $surname;
/**
* @var string
* @ORM\Column(type="string", length=512, unique=true, nullable=false)
*/
private $email;
/**
* @var string
* @ORM\Column(type="string", length=512, unique=true, nullable=false)
*/
private $passwordHash;
}
这是doctrine orm:schema-tool:create --dump-sql
CREATE TABLE users (id INT NOT NULL, deleted BOOLEAN NOT NULL, creation_date_time TIMESTAMP(0) WITHOUT TIME ZONE NOT NULL, PRIMARY KEY(id));
CREATE SEQUENCE users_id_seq INCREMENT BY 1 MINVALUE 1 START 1;
缺少用户的类实体属性!为什么?
答案 0 :(得分:0)
试试这个
* @ORM\Entity
* @ORM\Table(name="User")
答案 1 :(得分:0)
实际上,这可能是解决方案:
变化:
abstract class BaseEntity
为:
class BaseEntity
看看是否有效。它可能没有,请尝试一下。
答案 2 :(得分:0)
当我删除所有@ORM\
前缀时,它现在可以使用
答案 3 :(得分:0)
我遇到了同样的问题,发现这是由于将属性设置为私有。
/**
* @ORM\MappedSuperclass
*/
class BaseClass
{
/**
* @var string
* @ORM\Column(type="string", length=250, nullable=false)
*/
protected $channel;
//private $channel;
}
答案 4 :(得分:0)
抽象类上的映射应为* @ORM\MappedSuperclass
而不是/** @MappedSuperclass */
。映射是由Doctrine完成的,因此ORM注释在这里很重要。
您还需要确保抽象类中的属性为protected
(您已经说过)