내 데이터베이스 스키마는
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()
주문 과 같은 적절한 관계로 모델을 설정했다고 믿습니다. 그러면 eloquent를 사용하면 주문 수량의 합계와 함께 제품을 얻을 수 있습니다.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] 삭제
몇 마디 만하겠습니다