如何在Laravel中根据用户的级别获取用户的帖子



Laravel 8.4MySQLPHP 7.4

我有一个Rank模型和一个排名表,它通过hasmany关系和用户模型belongstoRank模型

与我的用户模型相关。还有一个User模型与Post模型通过相同的关系相关联。

我想获得所有的帖子,但是是按照发布帖子的用户的等级排序的。

那么我该如何写这样的查询呢?

我还没有测试过这个,但是这个SQL查询可能是你正在寻找的:

SELECT posts.*, ranks.name AS rank_name, users.id AS user_id FROM posts
JOIN users ON posts.user_id = users.id -- Join the users table with the posts table
JOIN ranks ON users.rank_id = ranks.id -- Join the ranks table with the users table
ORDER BY rank_name;

这个查询将返回每篇文章,以及一个"列"。称为包含排名的rank_name,以及包含用户id的user_idORDER BY将返回按排名名称排序的结果,本质上是按排名将它们分组在一起(例如,由"排名1"的用户写的所有帖子;将放在一起)。您可以使用DB::select按原样运行它,或者下面是我使用查询构建器的近似值:

$posts = DB::table('posts')
->select('posts.*', 'ranks.name AS rank_name', 'users.id AS user_id')
->join('users', 'posts.user_id', '=', 'users.id')
->join('ranks', 'users.rank_id', '=', 'ranks.id')
->orderBy('rank_name');

还值得指出的是,从技术上讲,您不需要使用ranks.name AS rank_name(users.id AS user_id也是如此);你可以直接通过ranks.name订购。然而,我发现前者在Laravel中更容易使用。

相关内容

  • 没有找到相关文章

最新更新