Doctrine的嵌入式继承

20

是否可以在Doctrine实体中嵌入值对象并使用继承?

我所考虑的情况是:

我有一个实体,其中包含一个嵌入式值对象。该值对象具有以下层次结构:

class myEntity {
    /** @Embedded(class = "baseValueObject") */
    private $value_object;
    ...
}

class baseValueObject {...}
class valueObject1 extends baseValueObject{...}
class valueObject2 extends baseValueObject2{...}

如果我将我的实体定义为嵌入式的baseValueObject,当我使用schema-tool来更新我的数据库模式时,什么也没有发生,所以我猜那不是正确的方法。

另一个选项是在实体上使用单表继承来创建一个子实体,该子实体使用其中一个值对象,另一个子实体用于另一个值对象。像这样:

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个回答

3

0

如果您想在字段中使用您的值对象,则应该在Doctrine中定义新类型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。因此,您不能将值对象用作目标。根据文档(我无法分享第三个链接)。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接