我有一个多对多关系的问题(下图) . 在食品店中,一些产品具有选择/变体,例如,披萨有7英寸,12英寸,16英寸的变体 . 将比萨添加到购物车时,必须选择变体 .
保存订单时 - 已购买的产品(不含变体)保存在 orderables
表中 - 已购买的变体保存在 variant_orderables
表中
顺便说一句,根据Laravel的惯例,数据透视表被称为 orderables
和 variant_orderables
,而不是你所期望的 . "customer_order_product",因为除了 customer_orders
之外, products
和 variants
也与 stock_orders
(商店从供应商处购买这些商品)处于多态关系中 . 我只是没有在图表上显示所有这些以保持简单 .
无论如何,购买物品,无论是 products
还是 variants
,都可以在订单中添加"extras" . 例如 . 披萨可以有额外的奶酪,或意大利辣香肠作为额外的东西(信息包含在 extras_groups_offers
表中) .
ordered_extras
是我们将列出已订购的额外内容的 product
或 variant
id的位置,以及应用附加内容的 orderables
或 variant_orderables
id .
所以在 variants
和 customer_orders
之间, variant_orderables
是枢轴,但是 variant orderables
与 extras_groups_offers
有关系, ordered_extras
为枢轴 .
我知道我可能需要用newPivot做一些事情,但由于这涉及一些多态的多对多关系,我不确定如何去做 . 如果有人能给我一个简单的示例解决方案,我将非常感激 .
基本上,我正试图达到一个阶段,我可以急切地为订单加载所有必要的信息,包括订购的产品/变体,以及已订购的每个产品/变体的所有订购附加信息 . 我只是不知道如何去做 .
谢谢 .
1 回答
我通过将
orderables
和variant_orderables
表作为普通模型来克服这个问题 . 这意味着我在关系方面确实有更多的链接,但我至少可以轻松地加载多个嵌套层,例如order.orderProducts.extrasGroupsOffers(P.S. orderables已重命名为order_product,如果你想知道它来自哪里)