我有两个模型:帖子和点赞。帖子和点赞是一对多的关系(因此,一个帖子有很多点赞)。喜欢的模特还有一个 isActive
表示喜欢的字段是主动的还是被动的。
我想获得(排序)获得最大“活跃”点赞的前 5 个帖子(仅考虑 isActive
字段为 true
的点赞)。
哪个 Laravel 查询可以给我结果?
我的问题是不仅根据相关模型的字段对帖子进行排序,而且还根据相关表中的条目数对帖子进行排序。
这是查询:
$posts = Post::selectRaw('posts.*, count(likings.id) as likes_count')
->leftJoin('likings', function ($join) {
$join->on('likings.post_id', '=', 'posts.id')
->where('likings.isActive', '=', 1);
})
->groupBy('posts.id')
->orderBy('likes_count', 'desc')
->take(5)
->get();
这是错误:
SQLSTATE[42000]: Syntax error or access violation: 1055 'database.posts.user_id' isn't in GROUP BY
(SQL: select posts.*, count(likings.id) as likes_count from 'posts' left join 'likings' on 'likings'.'post_id' = 'posts'.'id' and 'likings'.'isActive' = 1 group by 'posts'.'id' order by 'likes_count' desc limit 5)
最佳答案
或者只是执行这个查询
Post::with(['likes' => function ($query){ $query->where('active', 1); }]);
如果在 mysql 中太难,则按 php 排序。对于前一些 PostTransformer 类
关于mysql - 根据相关表使用哪个 laravel 查询对顶部条目进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33479717/