[英]How to join sub-query in laravel elequent
如何在 laravel 查詢生成器中進行此查詢?
select * from products p join
(
select product_id,sum(qty) total_sales
from orders where qty !=0 group by product_id
)
s on p.id = s.product_id
order by s.total_sales desc
有不同的方法可以做同樣的事情。 但是你可以用Raw Expressions做的和你上面的代碼很相似。
如果您想使用 Eloquent,請執行此操作,前提是訂單表的 product_id 是產品的外鍵
DB::table('products')->join('orders','products.id','orders.product_id')->where('orders.qty','!=',0)->get()
第一部分用於join
部分的子查詢。 它與raw
語句中的toSql()
方法連接。
$subQuery = DB::table('orders')
->where('qty', '!=', DB::raw(0))
->groupBy('product_id')
->select('product_id', DB::raw('sum(qty) as total_sales'));
return DB::table('products as p')
->join(DB::raw('(' . $subQuery->toSql() . ') s'), 'p.id', '=', 's.product_id')
->orderByDesc('s.total_sales')
->get();
它打印以下 sql;
SELECT *
FROM `products` AS `p`
INNER JOIN (
SELECT `product_id`, SUM(qty) AS total_sales
FROM `orders`
WHERE `qty` != 0
GROUP BY `product_id`
) s ON `p`.`id` = `s`.`product_id`
ORDER BY `s`.`total_sales` DESC
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.