Rumah > Soal Jawab > teks badan
Saya ada dua meja: pembeli dan pesanan. Pembeli mempunyai banyak pesanan.
Saya mahukan jumlah semua pembeli dan bilangan pesanan serta dua lajur pesanan (harga, yuran) dalam tempoh masa tertentu. Saya boleh mendapatkan kiraan dengan melakukan perkara berikut,
Buyer::withCount([ 'orders' => fn ($query) => $query ->where('created_at', '>=', $dateTo) ]) ->get();
Tetapi bagaimana untuk mendapatkan jumlah (->where('created_at', '>=', $dateTo)
) bagi tempoh masa tertentu?
P粉5671123912024-02-22 09:50:28
Dengan cara yang sama yang anda ada withSum() a>, ini adalah cara anda boleh melakukannya
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();
P粉1896062692024-02-22 00:03:31
Untuk menggunakan pembolehubah di dalam penutupan, anda perlu menggunakan use()
untuk menghantar nilainya kepada fungsi.
Untuk menggunakan withSum({relation},{column})
anda perlu membuat panggilan berasingan untuk setiap satu.
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()
Hanya tersedia dalam Laravel versi 8 atau lebih tinggi.
EditSintaks Fungsi Anak Panah
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();