Doctrine实体的抽象类

时间:2016-10-05 08:14:43

标签: symfony doctrine-orm

我正在尝试为涉及created_atupdated_at等常规字段的实体创建一个抽象类:

<?php
namespace AppBundle;

use Doctrine\ORM;

abstract class Model {

    /**
     * @var \DateTime $created_at
     *
     * @ORM\Column(type="datetime")
     */
    private $created_at;

    /**
     * @var \DateTime $updated_at
     *
     * @ORM\Column(type="datetime")
     */
    private $updated_at;

}

然后,我扩展我的课程:

<?php
namespace AppBundle\Entity;

use AppBundle\Model;

/**
 * Entity
 *
 * @ORM\Table()
 * @ORM\Entity(repositoryClass="RB\ProductsBundle\Entity\ProductRepository")
 */
class Entity extends Model
{
    /**
     * @var integer
     *
     * @ORM\Column(name="id", type="integer")
     * @ORM\Id
     * @ORM\GeneratedValue(strategy="AUTO")
     */
    private $id;

    /**
     * @var string
     *
     * @ORM\Column(name="name", type="string", length=255, nullable=true)
     */
    private $name;
}

问题是:当我制作php app/console doctrine:schema:update --dump-sql时,它无法识别模型字段。我怎么能改变呢?我应该使用特征吗?

编辑:我试图在我的抽象类顶部添加* @ORM\MappedSuperclass但没有运气

1 个答案:

答案 0 :(得分:11)

问题可能是抽象父类中的属性被定义为private。将它们更改为protected,它应该可以正常工作。

顺便说一下,我为此目的使用traits而不是继承,因为你的实体类可以使用多个traits,但它们只能扩展一个抽象类。