J'ai travaillé sur une application de panier d'achat et j'arrive maintenant au problème suivant.
Il y a un objet Utilisateur, Produit et Panier.
- La table Cart contient uniquement les colonnes suivantes: "id", "user_id", "product_id" et horodatages.
- Le UserModel "hasMany" Carts (car un utilisateur peut stocker plusieurs produits).
- Le CartModel "appartient à" un utilisateur et CartModel "hasMany" Produits.
Maintenant , pour le calcul total des produits que je peux appeler: Auth::user()->cart()->count()
.
Ma question est: Comment puis-je obtenir la SOMME () des prix (une colonne de produit) des produits dans le panier par cet utilisateur?
Je voudrais accomplir cela avec Eloquent et non en utilisant une requête (principalement parce que je pense que c'est beaucoup plus propre).
$sum = Auth::user()->cart()->products()->sum('price');
ou quelle que soit la colonne de prix sur votre table de produits.products->sum
implique qu'il s'agit d'un appel sum sur un objet de collection, plutôt que sur l'objet de générateur renvoyé par products (). Cela vaut la peine de clarifier celui que vous voulez dire ici et, idéalement, de fournir un lien pour expliquer les deux....->products->...
interrogera la base de données pour obtenir tous les produits associés du modèle actuel, puis travaillera avec cette collection en mémoire. Utiliser...->products()->...
simplement modifie la requête en cours de construction sans l'exécuter jusqu'à ce que quelque chose comme->sum()
soit appelé. Ce dernier peut être plus efficace, car il évite de transférer des informations inutiles de la base de données en mémoire.ce n'est pas votre réponse mais c'est pour ceux qui viennent ici chercher une solution à un autre problème. Je voulais obtenir la somme d'une colonne de table liée conditionnellement. Dans ma base de données, Deals a de nombreuses activités, je voulais obtenir la somme du "montant_total" de la table des activités où activités.deal_id = deal.id et activités.status = payé donc je l'ai fait.
il retourne
dans l'attribut Deals.
C'est maintenant la somme que je voulais obtenir pas le décompte.
la source
J'ai essayé de faire quelque chose de similaire, ce qui m'a pris beaucoup de temps avant de pouvoir comprendre la fonction collect (). Vous pouvez donc avoir quelque chose de cette façon:
collect($items)->sum('amount');
Cela vous donnera la somme totale de tous les éléments.
la source
collect()
collect()
est utilisé pour enrichir un tableau en un objet de collection, mais si vous n'avez pas de collection en premier lieu, il serait peut-être préférable d'utiliser simplement le tableau brutUtilisation également du générateur de requêtes
Pour obtenir la somme de toutes les valeurs de taux dans les taux de table.
Pour obtenir la somme des produits des utilisateurs.
la source