Я работаю над приложением для покупок, и теперь я пришел к следующей проблеме.
Есть объект User, Product и Cart.
- Таблица Корзина содержит только следующие столбцы: "id", "user_id", "product_id" и временные метки.
- UserModel "hasMany" Carts (потому что пользователь может хранить несколько продуктов).
- CartModel "принадлежит" пользователям и CartModel "hasMany".
Теперь, чтобы вычислить общие продукты, я могу просто позвонить: Auth::user()->cart()->count()
.
Мой вопрос: как я могу получить SUM() цен (столбец продукта) продуктов в корзине этим пользователем?
Я хотел бы сделать это с помощью Eloquent, а не с помощью запроса (главным образом потому, что я считаю, что он намного чище).
Auth::user()->products->sum('price');
Документация немного облегчает некоторые из методов Collection
, но все агрегаторы построителей запросов, по-видимому, доступны помимо avg()
, которые можно найти в http://laravel.com/docs/queries#aggregates.
Я пробовал делать что-то подобное, и это заняло у меня много времени, прежде чем я смог найти функцию collection(). Итак, вы можете иметь что-то таким образом:
collection($items)->sum('amount');
Это даст вам общую сумму всех предметов.
collect()
collect()
используется для обогащения массива в объекте коллекции, но если у вас нет коллекции в первую очередь, может быть лучше просто использовать необработанный массив
это не ваш ответ, а для тех, кто пришел сюда, для поиска другой проблемы. Я хотел бы получить сумму столбца связанной таблицы условно. В моей базе данных сделок есть много видов деятельности Я хотел получить сумму "amount_total" из таблицы Activities, где activity.deal_id = deal.id и activities.status = paid поэтому я сделал это.
$query->withCount([
'activity AS paid_sum' => function ($query) {
$query->select(DB::raw("SUM(amount_total) as paidsum"))->where('status', 'paid');
}
]);
он возвращает
"paid_sum_count" => "320.00"
в атрибуте "Сделки".
Это теперь сумма, которую я хотел получить, а не счет.