7

我正在寻找相关模型上多个列的平均值,如下所示:

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

这会导致多个查询。对这里的最佳实践有什么建议吗?

谢谢

4

1 回答 1

11

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

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

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

由于 Laravel 支持的所有数据库都可以识别聚合函数名称avg,因此这没什么大不了的。

于 2013-08-19T13:40:48.957 回答