如何使用Eloquent平均多列?

Rus*_*ack 7 laravel eloquent

我希望在相关模型上获得多列的平均值,如下所示:

$this->reviews()->avg('communication', 'friendliness')
Run Code Online (Sandbox Code Playgroud)

沟通和友善是一系列列名.但是看起来聚合函数只支持单列名,所以我这样做:

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

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

return round(array_sum($score) / sizeof($attributes), 1);
Run Code Online (Sandbox Code Playgroud)

这导致多个查询.有关于最佳实践的建议吗?

谢谢

Rub*_*zzo 11

要避免多个查询,可以在Eloquent中使用原始数据库表达式,如下所示:

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

echo $averages->c;
echo $averages->f;
Run Code Online (Sandbox Code Playgroud)

由于avgLaravel所有受支持的数据库都可以识别聚合函数名称,因此这不是什么大问题.