Symfony如何用QueryBuilder查询点赞数最高的10篇Article文章
你可以直接在ArticleRepository类中添加如下自定义查询方法,通过左连接关联点赞表、分组统计点赞数再排序实现需求:
public function findTop10MostLikedArticles() { return $this->createQueryBuilder('a') // 左连接关联点赞表,确保0赞文章也能被包含 ->leftJoin('a.articleLikes', 'al') // 按文章分组,避免重复数据 ->groupBy('a.id') // 同时查询文章实体和统计的点赞数 ->select('a, COUNT(al.id) as likeCount') // 按点赞数倒序排列,点赞数高的在前 ->orderBy('likeCount', 'DESC') // 最多返回10条结果 ->setMaxResults(10) ->getQuery() ->getResult(); }
调用方式
在需要使用数据的位置(比如控制器)直接调用该方法即可:
// 控制器中调用示例 $topArticles = $this->getDoctrine() ->getRepository(Article::class) ->findTop10MostLikedArticles();
补充说明
- 返回结果为二维数组,每个元素的第一个值为
Article实体对象,likeCount键对应的值为该文章的点赞总数。 - 如果你不需要展示0赞的文章,可以在
groupBy之后添加一行->having('likeCount > 0')过滤即可。 - 如果你确定不需要保留0赞的文章,可以将
leftJoin替换为innerJoin,查询效率会更高。
内容的提问来源于stack exchange,提问作者batch111
相关产品推荐
相关产品推荐

