首頁  >  問答  >  主體

如何在laravel中計算兩列的總和以及關聯關係的數量?

我有兩個表:買家和訂單。買家有很多訂單。

我想要所有買家以及特定時間內訂單數和兩列訂單(價格、費用)的總和。我可以透過執行以下操作來獲取計數,

Buyer::withCount([
    'orders' => fn ($query) => $query
        ->where('created_at', '>=', $dateTo)
])
->get();

但是如何得到指定時間段的總和(->where('created_at', '>=', $dateTo))?

P粉788571316P粉788571316264 天前480

全部回覆(2)我來回復

  • P粉567112391

    P粉5671123912024-02-22 09:50:28

    以同樣的方式,你有 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();

    回覆
    0
  • P粉189606269

    P粉1896062692024-02-22 00:03:31

    要在閉包內使用變數,您需要使用 use() 將其值傳送到該函數。

    用於使用 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 或更高版本中可用。

    編輯箭頭函數語法

    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();

    回覆
    0
  • 取消回覆