Doctrine实体继承和generate:entities命令

时间:2014-08-15 17:01:33

标签: php symfony doctrine-orm

我决定创建一个'MappedSuperclass',它将被所有其他实体扩展,以便在它们之间轻松共享两个常见字段,它看起来像这样:

/**
* @ORM\MappedSuperclass
*/
abstract class EntityBase {

/**
 * @ORM\Column(type="datetime")
 */
protected $created_at;

/**
 * @ORM\Column(type="datetime", nullable=true)
 */
protected $updated_at;

/**
 * @ORM\PrePersist
 * @ORM\PreUpdate
 */
public function updateTimestamps() {
    $this->updated_at = new \DateTime('now');

    if(is_null($this->created_at)) {
        $this->created_at = new \DateTime('now');
    }
}
}

我的问题是,在使用generate:entities命令后,脚本将副本复制到所有子类,两个字段(作为私有)以及updateTimestamps函数(为空) 。

有没有可能阻止这种行为?现在我只有5个实体,因此手动删除不需要的代码并不是什么大不了的事,但是当项目增长到20个或更多实体时可能会很痛苦。

或许这不是实现我需求的正确方法?

2 个答案:

答案 0 :(得分:0)

如果将类定义为抽象,则将其解释为“要实现”。这就是为什么你得到虚拟函数来实现实际类中的功能。您应该只扩展常规类来继承字段和函数以更新时间戳。

答案 1 :(得分:0)

如果继承实体类,则必须将父类的属性设置为private。子类只能通过getter / setter访问它们。我前一段时间遇到了同样的问题,使私人作品成为一种魅力。