主义联合继承与单表继承相结合

时间:2018-08-01 10:01:04

标签: php mysql symfony inheritance doctrine-orm

我希望模型中出现以下情况

我的空间中有不同的具体车辆类型,例如bicyclemotorcyclecartruck

由于无法从映射的超类查询数据,因此在我的情况下不使用它。 为了能够查询所有车辆,我决定将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
{
   ...
}

以此类推...

问题:

Doctrine不会创建继承的杰作……我认为SINGLE_TABLE扩展了JOINED类型的模型存在问题

如果我让doctrine migrationsdoctrine schema生成,将创建vehicle表,而不创建two_wheelerfour_wheeler

我希望车辆表至少汇总所有车辆ID(和通用属性)以及具有特定属性的four_wheelertwo_wheeler表。

10个月前有类似的帖子

Doctrine: SINGLE_TABLE inheritance extends from JOINED inheritance is that possible?

但是没有人回答

出什么问题了?我该如何解决?有更清洁的解决方案吗?

谢谢

0 个答案:

没有答案