我决定创建一个'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个或更多实体时可能会很痛苦。
或许这不是实现我需求的正确方法?
答案 0 :(得分:0)
如果将类定义为抽象,则将其解释为“要实现”。这就是为什么你得到虚拟函数来实现实际类中的功能。您应该只扩展常规类来继承字段和函数以更新时间戳。
答案 1 :(得分:0)
如果继承实体类,则必须将父类的属性设置为private。子类只能通过getter / setter访问它们。我前一段时间遇到了同样的问题,使私人作品成为一种魅力。