mysql - 根据相关表使用哪个 laravel 查询对顶部条目进行排序

标签 mysql laravel laravel-4

我有两个模型:帖子和点赞。帖子和点赞是一对多的关系(因此,一个帖子有很多点赞)。喜欢的模特还有一个 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/

相关文章:

php - 如果发现重复值,将数组添加在一起?

laravel 5.6 fill() 尝试使用不存在的 'id' 字段更新表

javascript - 在返回 View 中传递 json 作为参数

php - Magento MySQL - "OR"条件为两个 addAttributeToFilter()

php - root@localhost 无法通过 PHP (PDO) 连接到数据库

php - Laravel 5 中的 API 异常

php - Laravel 框架中的自定义函数原始查询

mysql - Laravel 4 Eloquent + 原始查询返回 NULL

php - Laravel Cache::forever() - 可靠吗?

php - 只过滤掉一些与SQL有共同点的参数