gpt4 book ai didi

php - 如何使用 Laravel 5/Eloquent/查询生成器让所有用户按他们的评分排序

转载 作者:行者123 更新时间:2023-11-29 02:41:21 24 4
gpt4 key购买 nike

我的数据库中有这些表。

用户

id 用户名

然后

书籍

id 名称 user_id

评级

id 评级 book_id

现在我想获取所有的 users 并在网页上列出他们,但我需要他们按评级排序。所以基本上我需要检查所有用户和他们的书,然后计算这些书的平均评分,然后根据平均评分获得用户。

我如何使用 Laravel 或查询构建器来做到这一点?

我的关系设置如下

用户模型

 public function books()
{
return $this->hasMany('App\Book');
}

书籍模型

 public function ratings()
{
return $this->hasMany('App\Rating');
}

评分模型

 public function book()
{
return $this->belongsTo('App\Book');
}

附言如果特定书籍没有评级,那么我想返回 0 评级而不是 null 所以在我的网页中我可以显示用户评级为 0谢谢。

最佳答案

你需要在你的 User 模型中使用 hasManyThrough,然后你就可以使用 withCount 来获得你想要的用户想要在你的 Controller 中。

class User extends Model
{
function books()
{
return $this->hasMany('App\Book');
}

function ratings()
{
return $this->hasManyThrough('App\Rating', 'App\Book');
}
}

添加后,在您的 Controller 中,您只需执行与上一个问题类似的操作,但改用 User: How to get average with orderBy Desc in Laravel 5

$users = User::withCount(['ratings as average_rating' => function($query) {
$query->select(DB::raw('coalesce(avg(rating),0)'));
}])->orderByDesc('average_rating')->get();

https://laravel.com/docs/5.6/eloquent-relationships#has-many-through

关于php - 如何使用 Laravel 5/Eloquent/查询生成器让所有用户按他们的评分排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51272619/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com