Php 如何获得';评论最多的帖子';在教义上?

Php 如何获得';评论最多的帖子';在教义上?,php,symfony,doctrine-orm,doctrine,dql,Php,Symfony,Doctrine Orm,Doctrine,Dql,我有邮政实体。Post实体有一个类别、多个标记和多个注释 如何获得由评论最多的人排序的“评论最多的帖子” 当我这样做时: $query = $this->createQueryBuilder('post') ->addSelect('COUNT(comments.id) AS HIDDEN comments_num') ->innerJoin('post.comments', 'comments') ->groupBy('post.id')

我有邮政实体。Post实体有一个类别、多个标记和多个注释

如何获得由评论最多的人排序的“评论最多的帖子”

当我这样做时:

$query = $this->createQueryBuilder('post')
    ->addSelect('COUNT(comments.id) AS HIDDEN comments_num')
    ->innerJoin('post.comments', 'comments')
    ->groupBy('post.id')
    ->orderBy('comments_num', 'DESC')
    ->addOrderBy('post.created', 'DESC')
    ->getQuery()
;
这是可行的,但条令提出了这么多的质疑,但问题是评论越多,质疑的次数就越多。。。不可能是那样的。在这个查询结果页面上,我有71个查询,它们的数量随着评论文章数量的增加而增加

当我做同样的事情,但添加左加入和选择类别,标签和评论那里。。。查询数很低,并且与评论数无关,但当我将该查询传递给Paginator时,它会在有结果的几页之后得到一种空白页

$query = $this->createQueryBuilder('post')
    ->addSelect('category, tags, comments')
    ->addSelect('COUNT(c) AS HIDDEN comments_num')
    ->innerJoin('post.comments', 'c')
    ->innerJoin('post.comments', 'comments')
    ->leftJoin('post.category', 'category')
    ->leftJoin('post.tags', 'tags')
    ->groupBy('post.id')
    ->addGroupBy('tags.id')
    ->addGroupBy('comments.id')
    ->orderBy('comments_num', 'DESC')
    ->addOrderBy('post.created', 'DESC')
    ->getQuery()
;
查询将传递给Paginator,因此必须在DQL中或使用QueryBuilder生成

编辑:
我认为Paginator中有一个bug,因为。。。当我转储第二个查询结果时,我在12的数组集合中得到了很好的结果。但是,当我将该查询传递给Paginator,然后调用Paginator.count()时,我得到的结果是:55:D,当测试数据库中有44篇文章时:)

首先用SQL编写查询,然后在Doctor中执行纯SQL


在您尝试将SQL转换为DQL之后

我想我可以帮您,但是为了确定什么原则是有用的,如果您可以在问题中添加DQL字符串(
…->getQuery()->getDQL()
)。据我所知,即使在使用QueryBuilder时,条令也会创建DQL,然后将其转换为SQL。。。