我正在尝试为涉及created_at
和updated_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
但没有运气
答案 0 :(得分:11)
问题可能是抽象父类中的属性被定义为private
。将它们更改为protected
,它应该可以正常工作。
顺便说一下,我为此目的使用traits而不是继承,因为你的实体类可以使用多个traits,但它们只能扩展一个抽象类。