Laravel多对多多态关系 - 定制方法/关键点

问题描述:

我有一个多对多关系的问题(下图)。在食品店中,一些产品具有选项/变体,例如披萨有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做些事情,但是由于这涉及到一些多态的多对多关系,我不确定如何去做。如果有人能给我一个简单的例子解决方案,我会非常感激。

基本上,我试图达到一个阶段,我可以加载订单的所有必要信息,包括订购的产品/变体,以及订购的每个产品/变体的所有订购附加件。我只是不知道该怎么去做。

谢谢。

我通过将orderablesvariant_orderables表作为正常模型来解决问题。这意味着我在关系方面有更多的链接,但我至少可以轻松加载多个嵌套图层,例如order.orderProducts.extrasGroupsOffers (P.S.可订购产品已重新命名为order_product,如果您想知道从哪里来的)