Calcul de la somme avec GroupBy dans Laravel Eloquent
Dans Laravel, l'ORM Eloquent offre un moyen puissant d'interagir avec la base de données. Une tâche courante consiste à calculer la somme d'une colonne tout en regroupant par un champ spécifique. Bien que l'utilisation de la méthode sum() semble simple, elle peut entraîner des erreurs dues à l'ordre d'exécution.
Approche incorrecte
$this->data['no_of_pages'] = Document::sum('no_of_pages') ->groupBy('users_editor_id'); // Call to undefined method
Dans le code ci-dessus, la méthode groupBy() est appelée après la méthode sum(), ce qui provoque une erreur car sum() exécute la requête et renvoie le résultat avant que groupBy() puisse être appliquée.
Solutions correctes
Pour calculer correctement la somme avec groupBy, utilisez les approches suivantes :
Approche 1 (recommandée)
Document::groupBy('users_editor_id') ->selectRaw('sum(no_of_pages) as sum, users_editor_id') ->pluck('sum', 'users_editor_id');
Cette méthode utilise la méthode selectRaw() pour créer un alias pour le calcul somme (somme). Ensuite, la méthode pluck() extrait les champs sum et users_editor_id, fournissant un résultat de tableau associatif.
Approche 2
Document::groupBy('users_editor_id') ->selectRaw('*, sum(no_of_pages) as sum') ->get();
Cette méthode crée un pseudo-ORM résultat en ajoutant un champ de somme à chaque modèle de document. Cependant, c'est moins souhaitable car le résultat n'est pas une véritable collection ORM.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!