【问题标题】:Can a single table inheritance entity extend a class table inheritance entity?单表继承实体可以扩展类表​​继承实体吗?
【发布时间】:2013-12-19 23:55:17
【问题描述】:

这是我的基础/父实体,设置它的子实体使用他们自己的表。

/** * @ORM\实体 * @ORM\Table(name="layer_object") * @ORM\InheritanceType("已加入") * @ORM\DiscriminatorColumn(name="discr", type="string") * @ORM\DiscriminatorMap({"service"="Service", "aircraft"="Aircraft", ...}) */ 类层对象 {}

飞机实体。一个单纯的孩子,做得很好

/** * @ORM\实体 * @ORM\Table(name="飞机") */ 飞机类扩展了 LayerObject

服务实体。一个复杂的孩子,它本身正在使用单表继承。

/** * @ORM\实体 * @ORM\Table(name="服务") * @ORM\InheritanceType("SINGLE_TABLE") * @ORM\DiscriminatorColumn(name="discr", type="string") * @ORM\DiscriminatorMap({"ground"="Ground", "onboard"="Onboard"}) */ 类服务扩展 LayerObject {}

服务实体的子实体

/** * @ORM\实体 */ 地面类扩展服务{}


app/console doctrine:schema:validate 没有发现错误,但app/console doctrine:schema:update --force 只是不会生成“服务”表,该表应该使用单表继承。似乎服务实体定义被简单地忽略了。

当然我可以手动为这个表创建 SQL,但是应用程序会增长,在某些时候我需要使用迁移。

谁能指出我的方向?谢谢。

找到一个重复的,但目前还没有答案,请参阅:Doctrine 2 multiple level inheritance

编辑:
当我也将类表继承用于第二级时(@ORM\InheritanceType("JOINED") 用于Service 实体)它工作得很好。见:Doctrine2 Multiple level inheritance

【问题讨论】:

    标签: symfony doctrine-orm symfony-2.3 single-table-inheritance class-table-inheritance


    【解决方案1】:

    纯映射无法实现您想要实现的目标。

    Class Table InheritanceSingle Table Inheritance 的文档明确指出:

    @InheritanceType、@DiscriminatorColumn 和 @DiscriminatorMap 必须 在作为映射实体一部分的 topmost 类上指定 层次结构。

    您可以通过将subscriber 实现到loadClassMetaData event 来实现这项工作,该event 动态更改继承类型(即基于子实体的注释)。

    更多灵感可以在this article找到。

    【讨论】:

    • 非常感谢。这基本上意味着:'在最顶层的类中选择一次继承类型并坚持下去'。现在这对我的应用程序来说很好......
    猜你喜欢
    • 2011-06-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-21
    • 2011-05-06
    • 2016-03-31
    • 2013-04-21
    • 1970-01-01
    相关资源
    最近更新 更多