[英]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.