是否可以对嵌入在教义实体中的值对象使用继承?
我正在考虑的情况是:
我有一个具有嵌入值对象的实体。该值对象具有以下层次结构:
class myEntity {
/** @Embedded(class = "baseValueObject") */
private $value_object;
...
}
class baseValueObject {...}
class valueObject1 extends baseValueObject{...}
class valueObject2 extends baseValueObject2{...}
如果我将我的实体定义为将 baseValueObject 作为可嵌入对象,则当我使用架构工具更新我的数据库架构时不会发生任何事情,所以我想这不是这样做的方法。
我正在考虑的另一个选项是对实体使用单表继承来创建使用其中一个值对象的子实体,并为另一个值对象创建另一个子实体。喜欢这个:
class myEntity {
/** @Embedded(class = "baseValueObject") */
private $value_object;
...
}
class myEntityA extends myEntity {
/** @Embedded(class = "valueObject1") */
private $value_object;
...
}
class myEntityB extends myEntity {
/** @Embedded(class = "valueObject2") */
private $value_object;
...
}
class baseValueObject {...}
class valueObject1 extends baseValueObject{...}
class valueObject2 extends baseValueObject2{...}
正确的方法是什么?甚至有可能这样做吗?
如果要从另一个可嵌入扩展一个可嵌入属性,则需要将父属性设置为protected
而不是private
。
https://github.com/doctrine/doctrine2/issues/4097
在字段中使用你的值对象,那么你应该在原则中定义新的类型 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html
如果要从基继承属性,则应使用@MappedSuperclass
注释 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html
当您希望通过创建特定实体按特定属性拆分实体时,应使用 @Embeddable
。因此,不能使用值对象作为目标。根据文档(我无法共享第三个链接)。