2013-08-19 10 views
6

私は、関連するモデルに複数のカラムに平均値を得るために、このような何かを探しています:コミュニケーションと親しみやすさは、列名の配列ですEloquentを使用して複数の列を平均化する方法は?

$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); 

この結果、複数のクエリが発生します。ここでベストプラクティスの提案はありますか?以下に示すように、あなたがEloquentraw database expressionを使用することができ、複数のクエリを避けるために

おかげ

答えて

9

:集計関数名avgはLaravelによってサポートされているすべてのデータベースで認識されているので

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

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

を、この意志大したことではない。

+0

ありがとうございます。 –

+0

すごく、ありがとう - DB上の少しのタイプミス:生、DB :: raw - cheers – Leon

+0

ありがとう、私は私の答えを更新しました。 –

関連する問題