laravel - 如何使用 Eloquent 平均多列?

标签 laravel 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);

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

谢谢

最佳答案

为避免多次查询,您可以使用 raw database expressionEloquent如下所示:

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

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

自聚合函数名avg被 Laravel 支持的所有数据库都认可,这没什么大不了的。

关于laravel - 如何使用 Eloquent 平均多列?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18307355/

相关文章:

php - Laravel 质量分配不插入 bool 值

sql - Eloquent 更新方法更改 created_at 时间戳

php - Laravel 中的 SQL 语法有什么问题?

php - Laravel 响应发送 android APK 文件

php - MySQL SELECT 查询获取记录如果 is_default = 1 否则 is_default = 0?

php - 核心 php 中的 Laravel Hash 等价物

php - Laravel:如何从数据库中获取最后 N 个条目

laravel - 我可以将 mysql 转储导入到 laravel 迁移中吗?

php - 拉拉维尔 5.4 : Pivot table

php - Laravel Eloquent : Reduce number of queries