Maison > base de données > tutoriel mysql > Comment additionner et regrouper efficacement des données dans Laravel Eloquent ?

Comment additionner et regrouper efficacement des données dans Laravel Eloquent ?

DDD
Libérer: 2024-12-31 17:07:16
original
808 Les gens l'ont consulté

How to Efficiently Sum and Group Data in Laravel Eloquent?

Comment additionner et regrouper par dans Laravel en utilisant Eloquent

Dans cette requête, l'objectif est d'utiliser Eloquent pour calculer la somme d'un colonne spécifique tout en regroupant les résultats en fonction d’une autre colonne. L'exemple donné dans la question, où la somme de la colonne no_of_pages doit être regroupée par users_editor_id, sert d'illustration pratique.

La tentative initiale, fournie dans la question, souffre d'un problème logique. Puisque sum() exécute instantanément la requête et renvoie le résultat, le regroupement est tenté une fois que la requête a déjà été traitée. Laravel ne prend pas en charge l'application du regroupement après l'exécution de la requête, d'où l'erreur.

Pour résoudre ce problème, il est nécessaire de modifier la structure de la requête. Au lieu d'utiliser groupBy() après sum(), commencez par regrouper les résultats à l'aide de groupBy('users_editor_id'). Cela créera efficacement des sous-requêtes pour chaque valeur user_editor_id unique.

Ensuite, ajoutez une clause selectRaw() pour spécifier les colonnes d'intérêt à partir des résultats groupés. Dans ce cas, il s'agit de la somme agrégée : sum(no_of_pages) as sum.

Enfin, utilisez pluck() pour extraire uniquement les colonnes sum et users_editor_id du résultat. Cela renverra un tableau avec users_editor_id comme clé et la somme correspondante comme valeur.

Voici la requête révisée :

Document::groupBy('users_editor_id')
   ->selectRaw('sum(no_of_pages) as sum, users_editor_id')
   ->pluck('sum','users_editor_id');
Copier après la connexion

Une approche alternative consiste à utiliser une clause selectRaw() pour incluez sum(no_of_pages) comme colonne supplémentaire dans la sous-requête. Cependant, cette méthode produit une collection de pseudo-modèles qui contiennent les colonnes d'origine et la somme calculée comme champ supplémentaire.

Document::groupBy('users_editor_id')
   ->selectRaw('*, sum(no_of_pages) as sum')
   ->get();
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal