【问题标题】:Inheritance on doctrine's embeddables学说的可嵌入物的继承
【发布时间】:2015-06-15 13:14:57
【问题描述】:

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

我现在考虑的情况是:

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

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

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

【问题讨论】:

    标签: php inheritance doctrine value-objects


    【解决方案1】:

    如果您想从另一个扩展一个嵌入,您需要将父属性设置为protected 而不是private

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

    【讨论】:

      【解决方案2】:

      如果您想在字段中使用您的值对象,那么您应该在教义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。所以你不能使用值对象作为目标。根据文档(我无法分享第三个链接)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-08-14
        • 1970-01-01
        • 2010-10-29
        • 1970-01-01
        • 2016-10-08
        相关资源
        最近更新 更多