学说不会产生继承类的属性

时间:2016-05-26 20:12:45

标签: php postgresql symfony orm doctrine-orm

我有一个抽象的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;

缺少用户的类实体属性!为什么?

5 个答案:

答案 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(您已经说过)