Maison  >  Questions et réponses  >  le corps du texte

Comment résoudre les problèmes de groupe et d'ordre dans Laravel ?

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粉823268006P粉823268006228 Il y a quelques jours415

répondre à tous(1)je répondrai

  • P粉561438407

    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();

    répondre
    0
  • Annulerrépondre