学说实体继承和生成实体命令


Doctrine entity inheritance and generate:entities command

我决定创建一个'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个或更多实体时,可能会很痛苦。

或者这不是满足我需求的正确方式?

如果你将一个类定义为抽象类,它将被解释为'要实现'。这就是为什么在实际类中使用虚拟函数来实现该特性的原因。您应该扩展一个常规类来继承字段和更新时间戳的函数。

如果继承实体类,必须将父类的属性设置为private。子类只能通过getter/setter访问它们。我有同样的问题前一段时间,使属性私有工作像一个魅力。