2013-07-29 20 views
1

所以我研究過Doctrine,Propel和Eloquent,到目前爲止,他們似乎都不想考慮在其他兩個表之間存在混合關係的中間表的存在。ORM's無法處理組合關係 - poopy

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)中的最佳方式是什麼?

回答

0

您描述的關係是一個用戶與多個車輛之間的一對多關係。

如果「vehicle」和「personVehicle」之間存在「one-to-one」關係,那麼「personVehicle」本質上是「vehicle」表的擴展。如果數據庫完全填充,則最終在這兩個表中都會有相同數量的行,每個vehicleId只有一行。您可以使用常用vehicleId作爲索引,將「車輛」和「personVehicle」表格組合成沒有數據或關係歧義的表格。無論如何,如果你真的想這樣創建你的表,你可以創建三個模型,並讓personVehicle成爲它自己的東西。做的正是像你說的,

溶媒(一對一)-personVehicle-(多對一)用戶

1

這是一個老問題,但我偶然發現了它,以爲我想補充我的2美分...

雖然我不知道對象的確切域,但車輛和personVehicle可能是表繼承的一個很好的候選者。這是主義提供的東西:http://docs.doctrine-project.org/projects/doctrine-orm/en/latest/reference/inheritance-mapping.html

這裏的訣竅是車輛模型(表格)包含所有與車輛相關的常見字段,但是是抽象的,從不使用。只有兒童模型被使用 - 在這種情況下是personVehicle。然後,您也可以輕鬆地添加其他兒童類別的車輛。