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