Я работал над приложением для тележки, и теперь я столкнулся со следующей проблемой ..
Есть объекты "Пользователь", "Товар" и "Корзина".
- Таблица корзины содержит только следующие столбцы: «id», «user_id», «product_id» и временные метки.
- UserModel "hasMany" тележек (поскольку пользователь может хранить несколько продуктов).
- Модель CartModel "принадлежит" пользователю, а CartModel "hasMany" продуктов.
Теперь , чтобы вычислить общее количество продуктов я могу просто позвонить: Auth::user()->cart()->count()
.
Мой вопрос: как я могу получить СУММУ () цен (столбец продукта) продуктов в корзине этого пользователя?
Я хотел бы добиться этого с помощью Eloquent, а не с помощью запроса (в основном потому, что я считаю, что он намного чище).
$sum = Auth::user()->cart()->products()->sum('price');
или любой другой столбец цен в таблице продуктов.products->sum
подразумевает, что это сумма вызовов для объекта коллекции, а не для объекта построителя, возвращаемого с помощью products (). Стоит уточнить, какой из них вы имеете в виду, и в идеале предоставить ссылку, чтобы объяснить оба....->products->...
будет запрашивать базу данных, чтобы получить все связанные продукты текущей модели, а затем работать с этой коллекцией в памяти. Использование...->products()->...
просто изменяет->sum()
строящийся запрос, не выполняя его до тех пор, пока не будет вызвано что-то подобное. Последнее может быть более эффективным, поскольку позволяет избежать переноса ненужной информации из базы данных в память.это не ваш ответ, это для тех, кто пришел сюда в поисках решения другой проблемы. Я хотел условно получить сумму столбца связанной таблицы. В моей базе данных Deals есть много действий. Я хотел получить сумму «amount_total» из таблицы Activities, где activity.deal_id = deal.id и activity.status = платные, поэтому я сделал это.
он возвращается
в атрибуте Сделки.
Это сумма, которую я хотел получить, а не счет.
источник
Я попытался сделать что-то подобное, что заняло у меня много времени, прежде чем я смог разобраться в функции collect (). Таким образом, у вас может получиться что-то такое:
collect($items)->sum('amount');
Это даст вам общую сумму всех предметов.
источник
collect()
collect()
используется для обогащения массива в объект коллекции, но если у вас вообще нет коллекции, может быть лучше просто использовать необработанный массивТакже с помощью построителя запросов
Для получения суммы всех значений ставок внутри таблицы ставок.
Чтобы получить суммирование пользовательских продуктов.
источник