是否可以在laravel中使用相关模型执行此原始SQL查询?

时间:2017-03-25 15:44:46

标签: php mysql laravel select eloquent

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();

但我需要所有订单中的所有产品。

也许我做错了,我不需要做我上面描述的用相关模型执行此查询的内容?

此查询的结果应该是最畅销的产品(订单中频率最高的产品)

2 个答案:

答案 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");