我有兩個表:買家和訂單。買家有很多訂單。
我想要所有買家以及特定時間內訂單數和兩列訂單(價格、費用)的總和。我可以透過執行以下操作來獲取計數,
Buyer::withCount([ 'orders' => fn ($query) => $query ->where('created_at', '>=', $dateTo) ]) ->get();
但是如何得到指定時間段的總和(->where('created_at', '>=', $dateTo))?
->where('created_at', '>=', $dateTo)
以同樣的方式,你有 withSum(),這是你可以做到的方法
Buyer::withCount([ 'orders' => fn($query) => $query->where('created_at', '>=', $dateTo), ])->withSum([ 'orders' => fn($query) => $query->where('created_at', '>=', $dateTo), ], 'price')->withSum([ 'orders' => fn($query) => $query->where('created_at', '>=', $dateTo), ], 'charge')->get();
要在閉包內使用變數,您需要使用 use() 將其值傳送到該函數。
use()
用於使用 withSum({relation},{column})# 你需要為每個單獨呼叫。
withSum({relation},{column})
Buyer::withCount([ 'orders' => function ($query) use ($dateTo) { $query->where('created_at', '>=', $dateTo); } ]) ->withSum([ 'orders' => function ($query) use ($dateTo) { $query->where('created_at', '>=', $dateTo); } ], 'price') ->withSum([ 'orders' => function ($query) use ($dateTo) { $query->where('created_at', '>=', $dateTo); } ], 'charge') ->get();
withSum() 僅在 Laravel 版本 8 或更高版本中可用。
withSum()
編輯箭頭函數語法
Buyer::withCount([ 'orders' => fn ($query) $query->where('created_at', '>=', $dateTo), ]) ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'price') ->withSum(['orders' => fn ($query) $query->where('created_at', '>=', $dateTo)], 'charge') ->get();
以同樣的方式,你有 withSum(),這是你可以做到的方法
要在閉包內使用變數,您需要使用
use()
將其值傳送到該函數。用於使用
withSum({relation},{column})
# 你需要為每個單獨呼叫。withSum()
僅在 Laravel 版本 8 或更高版本中可用。編輯箭頭函數語法