对学说的可嵌入性的继承

ant*_*nko 19 php inheritance doctrine value-objects

是否可以在教义实体中嵌入的值对象上使用继承?

我正在考虑的情况是:

我有一个拥有和嵌入值对象的实体.该值对象具有以下层次结构:

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

class baseValueObject {...}
class valueObject1 extends baseValueObject{...}
class valueObject2 extends baseValueObject2{...}
Run Code Online (Sandbox Code Playgroud)

如果我将我的实体定义为可嵌入的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{...}
Run Code Online (Sandbox Code Playgroud)

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

小智 0

如果您想在字段中使用值对象,那么您应该在学说中定义新类型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当您希望通过创建特定实体按特定属性拆分实体时,应该使用。所以你不能使用值对象作为目标。根据文档(我无法分享第三个链接)。