单个表继承实体是否可以扩展类表继承实体



这是我的基本/父实体,设置为使其子实体使用自己的表。

/***@ORM\实体*@ORM\Table(name="layer_object")*@ORM\InheritanceType("JOINED")*@ORM\DiscriminatorColumn(name="discr",type="string")*@ORM\DiscriminatorMap({"service"="service","aircraft"="aircraft",…})*/类LayerObject{}

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

/***@ORM\实体*@ORM\Table(name="aircraft")*/class Aircraft扩展LayerObject

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

/***@ORM\实体*@ORM\Table(name="service")*@ORM\InheritanceType("SINGLE_TABLE")*@ORM\DiscriminatorColumn(name="discr",type="string")*@ORM\DiscriminatorMap({"地面"="地面","机载"="机载")*/类服务扩展LayerObject{}

服务实体的子级

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


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

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

有人能给我指个方向吗?谢谢

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

编辑:
当我也将类表继承用于第二级(@ORMInheritanceType("JOINED")用于Service实体)时,它工作得很好。请参阅:Doctrine2多级继承

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

类表继承和单表继承的文档清楚地指出:

@InheritanceType、@DiscriminatorColumn和@DiscrimentorMap必须在最顶层的类上指定,该类是映射实体的一部分等级制度

您可以通过实现loadClassMetaData事件的订阅者来实现这一点,该订阅者动态地更改继承类型(即基于子实体的注释)。

在这篇文章中可以找到一些进一步的启示。

最新更新