Somme éloquente et requêtes de groupe par dans Laravel
Dans Laravel, l'ORM éloquent fournit un moyen pratique d'interagir avec la base de données. Cependant, lorsque vous travaillez avec de grands ensembles de données, il peut devenir nécessaire d'effectuer des requêtes complexes combinant des fonctions d'agrégation telles que SUM avec des opérations de regroupement telles que GROUP BY.
Le défi
Un Le scénario courant où cette question se pose est lorsque vous souhaitez obtenir la somme d'un champ particulier tout en regroupant les résultats par un autre champ. Par exemple, vous souhaiterez peut-être connaître le nombre total de pages écrites par chaque éditeur dans une base de données de documents.
Solution 1 : Utiliser selectRaw et pluck
Pour y parvenir , vous pouvez d'abord regrouper les résultats par champ souhaité à l'aide de la méthode groupBy. Ensuite, utilisez la méthode selectRaw pour définir le calcul, et enfin utilisez la méthode pluck pour créer un tableau de la somme pour chaque groupe :
Document::groupBy('users_editor_id') ->selectRaw('SUM(no_of_pages) AS sum, users_editor_id') ->pluck('sum', 'users_editor_id');
Solution 2 : Utiliser selectRaw et get
Vous pouvez également obtenir un résultat similaire en utilisant les méthodes selectRaw et get. Cependant, cette approche renverra une collection de pseudo-modèles qui incluent la somme calculée comme champ supplémentaire :
Document::groupBy('users_editor_id') ->selectRaw('*, SUM(no_of_pages) AS sum') ->get();
En tirant parti de ces techniques, vous pouvez effectuer efficacement des opérations d'agrégation et de regroupement complexes dans vos requêtes Eloquent pour obtenez des informations précieuses à partir de votre base de données.
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!