Bagaimana untuk mengira jumlah dua lajur dan bilangan hubungan yang berkaitan dalam laravel?
P粉788571316
P粉788571316 2024-02-21 11:59:52
0
2
528

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粉788571316
P粉788571316

membalas semua(2)
P粉567112391

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粉189606269

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();
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan