Heim  >  Fragen und Antworten  >  Hauptteil

Wie löse ich Gruppierungs- und Sortierungsprobleme in Laravel?

Ich habe eine Liste mit dem Namen maintenance 的数据库,其中有一个名为 cost 的字段。我现在想按 month 和year 获取成本总和,并按 month 和year in absteigender Reihenfolge. Kann mir jemand helfen?

Das habe ich versucht

$MaintenanceStats = Maintenance::oldest()
    ->get()
    ->groupBy(function($val) {
         return Carbon::parse($val->from)->format('F');
     })
     ->take(7);

Ich habe dieses Sammlungsobjekt unten und es funktioniert einwandfrei. Aber wie kann ich sie nach Monat und Jahr gruppieren und sie dann in absteigender Reihenfolge sortieren, anstatt nur nach Monat zu gruppieren? Außerdem benötige ich nur die gesamten monatlichen Ausgaben; ich benötige nicht alle Wartungsunterlagen.

Illuminate\Database\Eloquent\Collection {#1517 ▼ // app\Http\Controllers\GeneralController.php:40
  #items: array:5 [▼
    "September" => Illuminate\Database\Eloquent\Collection {#1452 ▶}
    "July" => Illuminate\Database\Eloquent\Collection {#1530 ▶}
    "January" => Illuminate\Database\Eloquent\Collection {#1519 ▶}
    "November" => Illuminate\Database\Eloquent\Collection {#1520 ▶}
    "December" => Illuminate\Database\Eloquent\Collection {#1521 ▶}
  ]
  #escapeWhenCastingToString: false
}

P粉823268006P粉823268006228 Tage vor413

Antworte allen(1)Ich werde antworten

  • P粉561438407

    P粉5614384072024-03-29 11:08:04

    最好的方法是使用数据库查询来完成此操作,但您还需要一个原始查询:

    $maintenanceStats = Maintenance::selectRaw("year(`from`) AS year, month(`from`) AS month, sum(cost) AS cost_total")
       ->groupByRaw("year(`from`)")
       ->groupByRaw("month(`from`)")
       ->orderBy('year')
       ->orderBy('month')
       ->get();

    Antwort
    0
  • StornierenAntwort