我的数据库架构是
products
--id
--name
orders
--id
--product_id
--quantity
由此,我想找到所有产品,其中如果产品数量的总和少于该数量,那么该产品的顺序将首先出现,最后出现该产品数量的最高总和。为此,我等效的MySQL代码是
SELECT *
FROM products p
JOIN (
SELECT product_id,sum(quantity) as s
FROM orders
GROUP BY (product_id)) i on p.id = i.product_id
ORDER BY s ASC
我如何在laravel中轻松做到这一点?
我相信您已经使用适当的关系(例如产品hasMany()
订单)设置了模型,然后使用雄辩的语言,可以使用以下命令获得产品以及订购数量的总和withSum
$products = Product::withSum('orders', 'quantity')
->orderBy('orders_sum_quantity')
->get();
如果您使用的是不支持的旧版本laravel,withSum
则可以将withCount
方法调整为
$products = Product::withCount([
'orders as quantity' => function ($query) {
$query->select(DB::raw("sum(quantity)"));
}
])->orderBy('quantity')
->get();
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句