学说可嵌入的继承

2022-08-30 21:22:17

是否可以对嵌入在学说实体中的价值对象使用继承?

我正在考虑的情况是:

我有一个实体,它具有嵌入值对象。该值对象具有以下层次结构:

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{...}

正确的方法是什么?甚至有可能这样做吗?


答案 1

如果要从一个嵌入项扩展另一个可嵌入项,则需要将父属性设置为 not 。protectedprivate

https://github.com/doctrine/doctrine2/issues/4097


答案 2

如果你想在字段中使用你的价值对象,那么你应该在教义中定义新的类型 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/cookbook/custom-mapping-types.html

如果要从基数继承属性,则应使用注释 http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html@MappedSuperclass

当您希望通过创建特定实体按特定属性拆分实体时,应使用。因此,您不能使用值对象作为目标。根据文档(我无法共享第三个链接)。@Embeddable


推荐