对学说的可嵌入性的继承

时间:2015-06-15 13:14:57

标签: php inheritance doctrine value-objects

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

我正在考虑的情况是:

我有一个拥有并嵌入了价值对象的实体。该值对象具有以下层次结构:

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

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

2 个答案:

答案 0 :(得分:1)

如果要将一个嵌入式扩展为另一个嵌入式,则需要将父级属性设置为const n = new Notification("asd"); console.log(n.permission); 而不是protected

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

答案 1 :(得分:0)

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

如果您想要从base继承属性,那么您应该使用@MappedSuperclass注释http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

如果希望通过创建特定实体按特定属性拆分实体,则应使用@Embeddable。所以你不能使用Value Object作为目标。根据文件(我无法分享第三个链接)。

相关问题