gpt4 book ai didi

symfony - 单表继承实体可以扩展类表​​继承实体吗?

转载 作者:行者123 更新时间:2023-12-04 14:59:22 26 4
gpt4 key购买 nike

这是我的基本/父实体,设置所以它的 child 使用他们自己的表。

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

飞机实体。一个简单的 child 做得很好

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

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

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

服务实体的 child

/**
* @ORM\实体
*/
class Ground 扩展了 Service {}

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

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

有人能指出我的方向吗?谢谢。

发现重复,但目前还没有答案,请参阅:Doctrine 2 multiple level inheritance

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

最佳答案

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

Class Table Inheritance 的文档和 Single Table Inheritance明确指出:

The @InheritanceType, @DiscriminatorColumn and @DiscriminatorMap must be specified on the topmost class that is part of the mapped entity hierarchy.



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

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

关于symfony - 单表继承实体可以扩展类表​​继承实体吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20359394/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com