【问题标题】:How to average multiple columns using Eloquent?如何使用 Eloquent 平均多列?
【发布时间】:2013-08-19 06:09:03
【问题描述】:

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

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

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

谢谢

【问题讨论】:

    标签: laravel eloquent


    【解决方案1】:

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

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

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

    【讨论】:

    • 太好了,谢谢 - DB:raw 上的小错字,应该是 DB::raw - 干杯
    猜你喜欢
    • 1970-01-01
    • 2021-03-04
    • 1970-01-01
    • 1970-01-01
    • 2021-03-28
    • 2023-03-21
    • 2013-07-06
    • 1970-01-01
    相关资源
    最近更新 更多