在Laravel中将查询生成器转换为Eloquent

时间:2017-09-24 02:43:55

标签: php laravel

我有一个用户表和一个评论表。

在我的评论表中,有一个" star_rating"柱。

我可以获得平均值" star_rating"使用以下查询为用户评分:

$star_rating = Review::where('artist_id', $user->id)->avg('star_rating');

然而,当我在刀片中打印出一堆用户时,这并不能很好地工作(我想在他们的名字旁边显示他们的平均star_rating)。

这就是为什么我想在User.php模型中设置一个函数,我可以调用该函数来获得用户的平均星级评分。

public function getAvgStarRating() {
    return $this-> // logic goes here //;
}

1 个答案:

答案 0 :(得分:0)

在您的用户模型中添加此关系:

public function reviews()
{
    return $this->hasMany(Review::class, 'artist_id', 'id');
}

然后添加此方法以获得星级评分的平均值

public function getAvgStarRating()
{
    return $this->reivews->avg('star_rating');
}

如果您需要显示一组用户评分,请先加急评论(效率更高)

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

然后

foreach($users as $user) {
    $user->getAvgStarRating();
}