首页 > 解决方案 > Doctrine 联合继承结合单表继承

问题描述

我想在我的模型中有以下情况

我的空间中有不同的混凝土车辆类型,例如bicyclea motorcycle、 acar和 atruck

由于无法从映射的超类中查询数据,因此不适用于我的情况。因此,为了能够查询所有车辆,我决定声明vehicle为最顶层实体并创建了一个具有JOINED继承类型的实体。此外,我以后必须能够查询更详细的类型。所以我把它们分成组TwoWheeler(摩托车和自行车)和FourWheeler(汽车和卡车)

* @ORM\Entity()
* @ORM\InheritanceType("JOINED")
* @ORM\DiscriminatorColumn(name="type",type="string")
* @ORM\DiscriminatorMap({"two_wheeler" = "TwoWheeler", "four_wheeler" = "FourWheeler"})
* @ORM\Table(name="vehicle")

abstract class Vehicle 
{
    protected $id;
    ...
}

TwoWheeler 应放在一张桌子上,而 FourWheeler 应放在另一张桌子上。为此,我创建了具有 SINGLE_TABLE 行为的两个模型。

* @ORM\Entity()
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type",type="string")
* @ORM\DiscriminatorMap({"bicycle" = "Bicycle", "motorcycle" = "Motorcycle"})
* @ORM\Table(name="two_wheeler")

abstract class TwoWheeler extends Vehicle
{

}

四轮车也是如此

* @ORM\Entity()
* @ORM\InheritanceType("SINGLE_TABLE")
* @ORM\DiscriminatorColumn(name="type",type="string")
* @ORM\DiscriminatorMap({"car" = "Car", "truck" = "Truck"})
* @ORM\Table(name="four_wheeler")

abstract class FourWheeler extends Vehicle
{

}

最后是混凝土实体

* @ORM\Entity()
abstract class Car extends FourWheeler
{
   ...
}

自行车

* @ORM\Entity()
abstract class Bicycle extends TwoWheeler
{
   ...
}

等等 ...

问题:

教义不会创造出这个继承的杰作......我认为它在SINGLE_TABLE扩展一个类型的模型方面存在问题JOINED

如果我让doctrine migrationsdoctrine schema生成,vehicle表将被创建,但不是two_wheelerfour_wheeler一个。

我希望一个车辆表至少总结所有车辆 ID(和公共属性)和一个具有特定属性的表four_wheelertwo_wheeler

10个月前有一个类似的帖子

教义:SINGLE_TABLE 继承从 JOINED 继承扩展,这可能吗?

但是没有人回答

问题是什么?我该如何解决这个问题?有更清洁的解决方案吗?

谢谢

标签: phpmysqlsymfonyinheritancedoctrine-orm

解决方案


推荐阅读