【问题标题】:How to count average value for each user?如何计算每个用户的平均值?
【发布时间】:2017-02-16 05:34:43
【问题描述】:

我有两张桌子:users, comments

每个用户都有一些 cmets。

我确实要求如下:

$users = User:with('comments')->get();

如何计算字段comments.ratewhere users.id = comments.user_id中的平均值

结果我应该得到包含用户信息和字段avg_rate的所有行的集合

我尝试使用->avg(),但它只返回一行,而不是每一行

我有自己的解决方案,但我希望在模型中移动此代码:

{{$users->reviewsAverage()->first()->avg("rate")}}

型号:

public function reviewsAverage()
    {
        return $this->hasMany('App\Review', 'user_id', 'id'); //->first()->avg('rate');
    }

【问题讨论】:

标签: laravel laravel-5 laravel-5.3


【解决方案1】:

有两个函数,一个用于关系,另一个用于平均函数

public function comments()
{
    return $this->hasManyThrough('App\Comment', 'id');
}

public function averageRating()
{
    return $this->comments()->selectRaw('avg(rate) as average_rate, comment_id')
                            ->groupBy('comment_id');
}

然后继续这样查询

foreach($users as $user){
    $rate = $user->averageRate();
}

【讨论】:

    猜你喜欢
    • 2016-03-28
    • 1970-01-01
    • 2019-05-03
    • 2022-01-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-06-23
    相关资源
    最近更新 更多