我希望获得相关模型中多列的平均值,如下所示:
$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);
这导致多个查询。有关最佳实践的建议吗?
由于
答案 0 :(得分:10)
要避免多次查询,您可以在raw database expression中使用Eloquent,如下所示:
$averages = $this->reviews()
->select(DB::raw('avg(communication) c, avg(friendliness) f'))
->first();
echo $averages->c;
echo $averages->f;
由于Laravel所有支持的数据库都识别出聚合函数名avg
,因此这不是什么大问题。