首页 文章

Laravel多对多关系 - 在数据透视上的自定义方法/关系

提问于
浏览
1

我有一个多对多关系的问题(下图) . 在食品店中,一些产品具有选择/变体,例如,披萨有7英寸,12英寸,16英寸的变体 . 将比萨添加到购物车时,必须选择变体 .

保存订单时 - 已购买的产品(不含变体)保存在 orderables 表中 - 已购买的变体保存在 variant_orderables 表中

diagram of polymorphic many-to-many relationship

顺便说一句,根据Laravel的惯例,数据透视表被称为 orderablesvariant_orderables ,而不是你所期望的 . "customer_order_product",因为除了 customer_orders 之外, productsvariants 也与 stock_orders (商店从供应商处购买这些商品)处于多态关系中 . 我只是没有在图表上显示所有这些以保持简单 .

无论如何,购买物品,无论是 products 还是 variants ,都可以在订单中添加"extras" . 例如 . 披萨可以有额外的奶酪,或意大利辣香肠作为额外的东西(信息包含在 extras_groups_offers 表中) .

ordered_extras 是我们将列出已订购的额外内容的 productvariant id的位置,以及应用附加内容的 orderablesvariant_orderables id .

所以在 variantscustomer_orders 之间, variant_orderables 是枢轴,但是 variant orderablesextras_groups_offers 有关系, ordered_extras 为枢轴 .

我知道我可能需要用newPivot做一些事情,但由于这涉及一些多态的多对多关系,我不确定如何去做 . 如果有人能给我一个简单的示例解决方案,我将非常感激 .

基本上,我正试图达到一个阶段,我可以急切地为订单加载所有必要的信息,包括订购的产品/变体,以及已订购的每个产品/变体的所有订购附加信息 . 我只是不知道如何去做 .

谢谢 .

1 回答

  • 0

    我通过将 orderablesvariant_orderables 表作为普通模型来克服这个问题 . 这意味着我在关系方面确实有更多的链接,但我至少可以轻松地加载多个嵌套层,例如order.orderProducts.extrasGroupsOffers(P.S. orderables已重命名为order_product,如果你想知道它来自哪里)

相关问题