Doctrine实体的抽象类

问题描述 投票:7回答:1

我正在尝试为我的实体创建一个抽象类,涉及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没有运气

symfony doctrine-orm
1个回答
11
投票

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

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

© www.soinside.com 2019 - 2024. All rights reserved.