php - Doctrine 联合继承结合单表继承
问题描述
我想在我的模型中有以下情况
我的空间中有不同的混凝土车辆类型,例如bicycle
a 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 migrations
或doctrine schema
生成,vehicle
表将被创建,但不是two_wheeler
和four_wheeler
一个。
我希望一个车辆表至少总结所有车辆 ID(和公共属性)和一个具有特定属性的表four_wheeler
。two_wheeler
10个月前有一个类似的帖子
教义:SINGLE_TABLE 继承从 JOINED 继承扩展,这可能吗?
但是没有人回答
问题是什么?我该如何解决这个问题?有更清洁的解决方案吗?
谢谢
解决方案
推荐阅读
- php - Laravel:如何在 maatwebsite DOMPDF 导出中更改 PDF 样式?
- c++ - 我在 Windows 上构建了一个 C++ 程序,如何为 MacOS 编译一个可执行文件?
- flask - 为具有 pytest 和覆盖率的 Flask 应用程序编写 test_login
- haskell - 数据构造函数不在范围内 - Haskell
- javascript - 使用构造函数移动心脏
- javascript - React Native 上的 Like 按钮?我不能让它动态更新
- php - WooCommerce:获取选择的包裹运输方式并将其存储为订单项目元数据
- haskell - Optparse-applicative:连续解析(ReadM)
- node.js - 如何在打开另一个本地字段之前解决一个本地字段中所有外国字段的mongodb聚合查找返回结果
- java - mTLS/TLS Redis 6 问题 Java