Laravel Eloquent Sum of relation's column

124

I've been working on a shopping cart application and now I've come to the following issue..

There is a User, a Product and a Cart object.

  • The Cart table only contains the following columns: id, user_id, product_id and timestamps.
  • The UserModel hasMany Carts (because a user can store multiple products).
  • The CartModel belongsTo a User and CartModel hasMany Products.

Now to calculate the total products I can just call: Auth::user()->cart()->count().

My question is: How can I get the SUM() of prices (a column of product) of the products in cart by this User?
I would like to accomplish this with Eloquent and not by using a query (mainly because I believe it is a lot cleaner).

This question is tagged with php laravel eloquent relation

~ Asked on 2014-02-10 14:20:58

The Best Answer is


256

Auth::user()->products->sum('price');

The documentation is a little light for some of the Collection methods but all the query builder aggregates are seemingly available besides avg() that can be found at http://laravel.com/docs/queries#aggregates.

~ Answered on 2014-02-10 14:40:35


70

this is not your answer but is for those come here searching solution for another problem. I wanted to get sum of a column of related table conditionally. In my database Deals has many Activities I wanted to get the sum of the "amount_total" from Activities table where activities.deal_id = deal.id and activities.status = paid so i did this.

$query->withCount([
'activity AS paid_sum' => function ($query) {
            $query->select(DB::raw("SUM(amount_total) as paidsum"))->where('status', 'paid');
        }
    ]);

it returns

"paid_sum_count" => "320.00"

in Deals attribute.

This it now the sum which i wanted to get not the count.

~ Answered on 2017-11-09 13:50:32


Most Viewed Questions: