2016-08-18 57 views
1

我有一個多對多關係的問題(下圖)。在食品店中,一些產品具有選項/變體,例如披薩有7英寸,12英寸,16英寸的變種。當比薩被添加到購物車時,必須選擇變體。Laravel多對多多態關係 - 定製方法/關鍵點

當一個訂單保存 - 買產品(不包括變種)被保存在orderables表 - 這是買都保存在variant_orderables

diagram of polymorphic many-to-many relationship

順便說一句變種,樞軸表稱爲orderablesvariant_orderables,而不是根據Laravel公約所預期的,例如「customer_order_product」,因爲除了customer_orders之外,productsvariants也與stock_orders(其中商店從供應商那裏購買這些物品)處於多態關係。我只是沒有在圖上顯示所有內容,以保持簡單。

無論如何,購買的物品,不管它們是products還是variants,都可以在訂單中添加「額外」。例如。比薩餅可以有額外的奶酪或意大利辣香腸作爲臨時演員(信息包含在extras_groups_offers表中)。

ordered_extras是我們將列出已下令,與羣衆演員被應用在orderablesvariant_orderables ID沿着額外的productvariant ID。

所以variantscustomer_orders之間,variant_orderables是樞轉,但隨後variant orderables具有extras_groups_offersordered_extras作爲樞軸的關係。

我知道我可能需要用newPivot做些事情,但是由於這涉及到一些多態的多對多關係,我不確定如何去做。如果有人能給我一個簡單的例子解決方案,我會非常感激。

基本上,我試圖達到一個階段,我可以加載訂單的所有必要信息,包括訂購的產品/變體,以及訂購的每個產品/變體的所有訂購附加件。我只是不知道該怎麼去做。

謝謝。

回答

0

我通過將orderablesvariant_orderables表作爲正常模型來解決問題。這意味着我在關係方面有更多的鏈接,但我至少可以輕鬆加載多個嵌套圖層,例如order.orderProducts.extrasGroupsOffers (P.S.可訂購產品已重新命名爲order_product,如果您想知道從哪裏來的)