Heim  >  Fragen und Antworten  >  Hauptteil

Wie berechnet man die Summe zweier Spalten und die Anzahl der zugehörigen Beziehungen in Laravel?

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粉788571316P粉788571316264 Tage vor482

Antworte allen(2)Ich werde antworten

  • P粉567112391
  • 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();

    Antwort
    0
  • StornierenAntwort