Wie berechnet man die Summe zweier Spalten und die Anzahl der zugehörigen Beziehungen in Laravel?
P粉788571316
P粉788571316 2024-02-21 11:59:52
0
2
495

Ich habe zwei Tabellen: Käufer und Bestellungen. Käufer haben viele Bestellungen.

Ich möchte die Summe aller Käufer und die Anzahl der Bestellungen sowie zwei Spalten mit Bestellungen (Preis, Gebühr) innerhalb eines bestimmten Zeitraums. Ich kann die Zählung ermitteln, indem ich Folgendes mache:

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

Aber wie erhält man die Summe (->where('created_at', '>=', $dateTo)) eines bestimmten Zeitraums?

P粉788571316
P粉788571316

Antworte allen(2)
P粉567112391

以同样的方式,你有 withSum() a>,这是您可以做到的方法

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

要在闭包内使用变量,您需要使用 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();
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage