【问题标题】:ORM's are incapable of handling combination relationships - poopyORM 无法处理组合关系 - poopy
【发布时间】:2013-07-29 18:58:01
【问题描述】:

所以我查看了 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)的最佳方式是什么?

【问题讨论】:

    标签: orm doctrine laravel propel eloquent


    【解决方案1】:

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

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

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

    【讨论】:

      【解决方案2】:

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

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

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

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-06-27
        • 1970-01-01
        • 1970-01-01
        • 2019-03-31
        • 1970-01-01
        相关资源
        最近更新 更多