[英]Laravel 5.6 / Eloquent Sum and GroupBy with related tables/relationships
我試圖在按表中的數據以及相關表進行分組時對一列求和。
訂單表
訂購項目表
關系
訂單項屬於訂單
public function order() : BelongsTo
{
return $this->belongsTo(Order::class);
}
詢問
我正在尋找以下結果:
以下獲取具有正確組的集合:
$items = OrderItem::with(['order'])
->get()
->groupBy(['fulfilment_location_id', 'product_id']);
然后我可以遍歷這個數組以獲得我正在尋找的結果,如下所示:
$result = [];
foreach($items as $location_id => $products_collection){
foreach($products_collection as $product_id => $order_items_collection){
$sum = $order_items_collection->sum(function(OrderItem $oi){
return $oi->qty;
});
isset($result[$location_id][$product_id]) ?
$result[$location_id][$product_id] += $sum :
$result[$location_id][$product_id] = $sum;
}
}
...然而這似乎很啰嗦。 通過將 location_id 列從 orders 表復制到 order_items 表,我可以更容易地獲得結果,但這感覺不太好。 我希望有一種更簡單的方式來使用 eloquent(與編寫原始查詢相反)。
類似的東西:
$items = OrderItem::select(DB::raw('sum(order_items.qty) as sumqty, o.location_id as lcoation, order_items.product_id as product_id'))
->leftJoin('orders as o', 'o.id', 'order_items.order_id')
->groupBy(['product_id', 'lcoation']);
應該給你:
sumqty | location | product_id
---------------------------------
12 3 12 // example data
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.