Maison > Questions et réponses > le corps du texte
J'ai une liste appelée maintenance
的数据库,其中有一个名为 cost
的字段。我现在想按 month 和year
获取成本总和,并按 month 和year
par ordre décroissant. Quelqu'un peut-il m'aider?
C'est ce que j'ai essayé
$MaintenanceStats = Maintenance::oldest() ->get() ->groupBy(function($val) { return Carbon::parse($val->from)->format('F'); }) ->take(7);
J'ai reçu cet objet de collection ci-dessous et il fonctionne très bien. Mais comment puis-je les regrouper par mois et par année, puis les trier par ordre décroissant au lieu de simplement les regrouper par mois ? De plus, je n'ai besoin que du total des dépenses mensuelles ; je n'ai pas besoin de tous les dossiers d'entretien.
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
La meilleure façon est d'utiliser une requête de base de données pour ce faire, mais vous aurez également besoin d'une requête brute :
$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();