2013-08-19 38 views
6

我期待獲得多個列的平均值上相關的模型,這樣的事情:如何使用雄辯平均多個列?

$this->reviews()->avg('communication', 'friendliness') 

在哪裏的溝通和友好是列名的數組。不過看來聚合函數只支持單列名稱,所以我這樣做:

$attributes = array('communication', 'friendliness'); 
$score = array(); 

foreach ($attributes as $attribute) 
{ 
    $score[] = $this->reviews()->avg($attribute); 
} 

return round(array_sum($score)/sizeof($attributes), 1); 

這會導致多個查詢。任何建議在這裏最佳做法?

感謝

回答

9

爲避免多次查詢,你可以在Eloquent使用raw database expression,如下圖所示:

$averages = $this->reviews() 
    ->select(DB::raw('avg(communication) c, avg(friendliness) f')) 
    ->first(); 

echo $averages->c; 
echo $averages->f; 

由於聚合函數名avg被所有支持的數據庫通過Laravel的認可,這將不是什麼大不了的事。

+0

謝謝 - 作品一種享受。 –

+0

非常好,謝謝 - DB上的小錯字:raw,應該是DB :: raw - cheers – Leon

+0

謝謝,我更新了我的答案。 –