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

时间:2016-08-18 16:26:42

标签: laravel polymorphism pivot

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

保存订单时   - 购买的产品(不含变体)保存在// call this function on key up and you will get your result function validate(search = '') { var message = ''; if ($('#textarea').val().length >= 65) { if ($('#textarea').val().search(search) != -1) { message = 'Great'; }else { message = 'You have to use '+search+' word.'; } } else { message = (65 - $('#textarea').val().length) + ' letters left.'; } return message; } $(function() { $('#textarea').on("keyup", function(e){ // replace the search_word with the word you want to search var message = validate('search_word'); // I'm showing your message in a span $("#message").text(message); }); })表中   - 购买的变体保存在<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <textarea name="textarea" id="textarea" cols="30" rows="10"></textarea> <span id="message"></span>

diagram of polymorphic many-to-many relationship

顺便说一下,根据Laravel惯例,数据透视表名为orderablesvariant_orderables,而不是您所期望的,例如“customer_order_product”,因为除了orderables之外,variant_orderablescustomer_orders也与products处于多态关系(商店从供应商处购买这些商品)。我只是没有在图表上显示所有内容以保持简单。

无论如何,购买的商品,无论是variants还是stock_orders,都可以在订单中添加“额外商品”。例如。披萨可以有额外的奶酪或意大利辣香肠作为附加物(products表中包含的信息)。

variants我们会在其中列出已订购的额外内容的extras_groups_offersordered_extras ID,以及productvariant ID附加内容适用于。

因此,在orderablesvariant_orderables之间,variants是支点,但customer_ordersvariant_orderables的关系为variant orderables枢轴。

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

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

感谢。

1 个答案:

答案 0 :(得分:0)

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