SELECT products.id, products.name, Count(order_product.product_id)
FROM products INNER JOIN (orders INNER JOIN order_product ON orders.id = order_product.order_id) ON products.id = order_product.product_id
GROUP BY products.id, products.name
ORDER BY Count(order_product.product_id) DESC
我实际上无法理解如何使用模型:
返回Order :: with(' products') - > get();
在这行代码之后我按照这个顺序获取了相关产品的所有订单,但我只能通过一个订单访问它们,我的意思是I cant
为所有订单做下一步:
return Order::with('products')->//all()//->products()->get();
我只能这样做1个订单:
return Order::with('products')->first()->products()->get() or
return Order::with('products')->find($id)->products()->get();
但我需要所有订单中的所有产品。
也许我做错了,我不需要做我上面描述的用相关模型执行此查询的内容?
此查询的结果应该是最畅销的产品(订单中频率最高的产品)
答案 0 :(得分:0)
withCount()查询构建器方法可能是最简单的方法:
Product::withCount('orders')->orderBy('orders_count', 'desc')->get();
答案 1 :(得分:0)
我建议使用DB :: raw()来进行更具体/更复杂的查询。你会这样做:
不要忘记“使用DB”;在文件的顶部!
$result = DB::raw("SELECT products.id, products.name, Count(order_product.product_id)
FROM products INNER JOIN (orders INNER JOIN order_product ON orders.id = order_product.order_id) ON products.id = order_product.product_id
GROUP BY products.id, products.name
ORDER BY Count(order_product.product_id) DESC");