我有两张桌子:users, comments
。
每个用户都有一些评论。
我的请求如下:
$users = User:with('comments')->get();
如何计算字段comments.rate
where 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');
}
答案 0 :(得分:0)
有两个函数用于关系,另一个函数用于平均函数
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();
}