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

 曼珠沙華的朦朧_759 发布于 2023-02-13 10:08

这是我的基本/父实体,设置所以它的子节点使用自己的表.

/**
 * @ORM\Entity
 * @ORM\Table(name="layer_object")
 * @ORM\InheritanceType("JOINED")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"service"="Service", "aircraft"="Aircraft", ...})
 */
class LayerObject {}

飞机实体.一个表现不错的简单孩子

/**
 * @ORM\Entity
 * @ORM\Table(name="aircraft")
 */
class Aircraft extends LayerObject

服务实体.一个复杂的子节点,它本身就是使用单表继承.

/**
 * @ORM\Entity
 * @ORM\Table(name="service")
 * @ORM\InheritanceType("SINGLE_TABLE")
 * @ORM\DiscriminatorColumn(name="discr", type="string")
 * @ORM\DiscriminatorMap({"ground"="Ground", "onboard"="Onboard"})
 */
class Service extends LayerObject {}

服务实体的子女

/**
 * @ORM\Entity
 */
class Ground extends Service {}


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

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

任何人都可以指向某个方向吗?谢谢.

发现重复,但到目前为止还没有答案,请参阅:Doctrine 2多级继承

编辑:
当我为第二级使用类表继承时(@ORM\InheritanceType("JOINED")对于Service实体),它工作得很好.请参阅:Doctrine2多级继承

1 个回答
  • 纯映射无法实现您想要实现的目标.

    类表继承和单表继承的文档清楚地说明:

    必须在作为映射实体层次结构一部分的最顶层类上指定@InheritanceType,@ DisciminatorColumn和@DiscriminatorMap .

    您可以通过实现动态更改继承类型的事件的订阅者(即基于子实体的注释)来完成此工作.loadClassMetaData

    在本文中可以找到一些进一步的灵感.

    2023-02-13 10:10 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有