2014-12-07 53 views
2

這是我的總和查詢,它實際上總結了特定學生的單元數和主題價格。我該如何使用laravel中的刀片進行總和查詢4

$subjects = DB::table('subjects') 
      ->join('subjectblocking', 'subjects.subjectcode', '=', 'subjectblocking.subjectcode') 
      ->join('grades', 'subjectblocking.blockcode', '=', 'grades.blockcode') 
      ->select('subjects.numofunit as total_units','subjects.price as total_tuition') 

      ->orWhere(function($query) 
      { 
       $query->where('grades.studentid', '=', '2013-F0218') 
         ->where('sem', '=', '1') 
         ->where('sy', '=', '2013-2014'); 
      }) 
      ->sum('subjects.numofunit','subjects.price'); 


    return View::make('users.assessment')->with('subjects', $subjects); 

這是我的foreach它在刀片

@foreach ($subjects as $subject) 
       { 
       <tr> 
       <td>{{$subject->total_units}}</td> 
       <td>{{$subject->total_tuition}}</td> 
       </tr>   
       } 
      @endforeach 

但是它告訴我,

提供的foreach

無效的參數()

+0

這意味着,在您的查詢時出現錯誤。 – 2014-12-07 15:22:25

+0

@LorenzMeyer井。但我怎麼能foreach葉片中的總和? – 2014-12-07 16:50:55

+0

foreach沒有問題。問題出在您的查詢中。 $ subject是false而不是數組。 – 2014-12-07 17:43:24

回答

2

這不是如何聚合方法在Query\Builder中工作。選中此項:

DB::table('a_table') 
    ->sum('a_field'); // returns string, eg. '555' 
    // or 
    ->count('a_field'); // returns int, eg. 333 

對於所有聚合方法也是如此。

爲了達到你想要什麼,你需要selectRawDB::raw)和顯然是一個groupBy條款:

DB::table(..) 
    ->selectRaw('sum(a_field) as sum, sum(another_field) as another_sum') 
    ->groupBy('yet_another_field') 
    ->get(); 
+0

謝謝!有效 :) – 2014-12-08 03:52:49