1

因此,我查看了 Doctrine、Propel 和 Eloquent,到目前为止,它们似乎都不想考虑存在一个中间表,该中间表在其他两个表之间具有混合关系。

http://s14.postimg.org/uoo8xt1sx/Screen_Shot_2013_07_29_at_2_50_47_PM.png

person与 personVehicle有一对多personId的关系,这由.

vehicle与 personVehicle具有一对一的关系,这由 的主键促成vehicleId

到目前为止,我看过的所有 ORM 都处理奇异关系

  1. 一对一
  2. 一对多
  3. 多对多

但不是任何两种或多种组合。那正确吗?使用 ORM 或替代方法(如果可用)插入这些关系(人、车辆和相应的 id 到 personVehicle)的最佳方法是什么?

4

2 回答 2

1

这是一个老问题,但我偶然发现它并认为我会加我的 2 美分......

虽然我不知道您的对象的确切域,但 vehicle 和 personVehicle 可能是表继承的良好候选者。这是 Doctrine 提供的东西:http: //docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

这里的技巧是车辆模型(表)包含与车辆相关的所有常见字段,但它是抽象的且从未使用过。仅使用子模型 - 在本例中为 personVehicle。然后,您也可以轻松添加其他子类车辆。

于 2014-07-11T18:02:52.270 回答
0

您描述的关系实际上是一个用户对多辆车之间的一对多关系。

如果说“vehicle”和“personVehicle”之间存在“一对一”的关系,那么“personVehicle”本质上就是“vehicle”表的扩展。如果数据库已完全填充,您最终会在这两个表中得到相同数量的行,每个vehicleId 对应一行。您可以使用公共vehicleId 作为索引来组合“vehicle”和“personVehicle”表,而不会出现数据或关系不明确的情况。

无论如何,如果您真的想以这种方式创建表格,您可以只创建三个模型,并让 personVehicle 成为它自己的东西。照你说的做,

车辆-(一对一)-人车辆-(多对一)-用户

于 2013-11-03T22:33:10.413 回答