11

Ehi there, I'm new in laravel and I have some issues with laravel query builder. The query I would like to build is this one:

SELECT SUM(transactions.amount)
FROM transactions
JOIN categories
ON transactions.category_id == categories.id 
WHERE categories.kind == "1"

I tried building this but isn't working and I can't figure out where I am wrong.

$purchases = DB::table('transactions')->sum('transactions.amount')
    ->join('categories', 'transactions.category_id', '=', 'categories.id')
    ->where('categories.kind', '=', 1)
    ->select('transactions.amount')
    ->get();

I would like to get all the transactions that have the attribute "kind" equal to 1 and save it in a variable. Here's the db structure:

transactions(id, name, amount, category_id)

categories(id, name, kind)

25

You don't need to use select() or get() when using the aggregate method as sum:

$purchases = DB::table('transactions')
    ->join('categories', 'transactions.category_id', '=', 'categories.id')
    ->where('categories.kind', '=', 1)
    ->sum('transactions.amount');

Read more: http://laravel.com/docs/5.0/queries#aggregates

  • Thank you so much limonte! I read a lot but didn't get it clear! – burn15 May 24 '15 at 16:58
  • @burn15 you're welcome :) don't forget to accept the answer for further readers. – Limon Monte May 24 '15 at 17:07
  • I am so sorry! I didn't knew I had to do that, I'm a newbie in stackoverflow! I am having other issues in my code, and maybe you can help me out. Sorry but I don't really get laravel query building methods. I have this query, which takes all the transactions that have categories with the kind equal to 1 and then I print the results to show them to the user. The problem is that all users can see them! The relations between the main tables are good, I guess something is wrong with the query, probably I should get the transactions created by the connected user. What should I change? – burn15 Jun 6 '15 at 0:15
  • Here's the query: '$purchases = DB::table('transactions')->select('transactions.id', 'transactions.name', 'amount', 'description', 'date', 'category_id') ->join('categories', 'transactions.category_id', '=', 'categories.id') ->where('categories.kind', '=', 1) ->get();' – burn15 Jun 6 '15 at 0:16
9

If one needs to select SUM of a column along with a normal selection of other columns, you can sum select that column using DB::raw method:

DB::table('table_name')
    ->select('column_str_1', 'column_str_2', DB::raw('SUM(column_int_1) AS sum_of_1'))
    ->get();
2

Aggregates methods of query builder are:

  1) max() 
  2) min()  
  3) sum()  
  4) avg()   
  5) count() 

You can use like,

 $purchases = DB::table('transactions')
     ->join('categories', 'transactions.category_id', '=', 'categories.id')
     ->where('categories.kind', '=', 1)
     ->sum('transactions.amount');

Your Answer

来自 https://stackoverflow.com/questions/30424949/laravel-query-builder-sum-method-issue