簡體   English   中英

如何在 laravel elequent 中加入子查詢

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

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM