Heim > Fragen und Antworten > Hauptteil
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粉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();