我有两个实体
- 文章
- 用户
文章与名为“likedByUsers”的用户有关系
现在,我想按喜欢的数量排序文章,但是:
- 我不想拥有“numberOfLikes”属性,因为更新它太麻烦了
- 我有太多的文章(100k+),无法在 PHP 端进行“排序”(事实上我们已经达到排序的极限,这就是我问这个问题的原因)
- 我可以忍受没有得到返回值中的点赞数(因为序列化程序稍后会对其进行水合)
我目前拥有的是:
$builder = $this->createQueryBuilder('a');
->select('COUNT(u) AS nbrLikes')
->leftJoin('a.likedByUsers', 'u')
->orderBy('nbrLikes', 'DESC')
->groupBy('a.id')
->getQuery()
->getResult()
;
这会正确返回喜欢的次数(没有喜欢的文章为 0),但它不会返回文章本身
我试过添加
->select('a, COUNT(u) AS HIDDEN nbrLikes')
但它失败了,因为 a
不是 GROUP BY
有什么想法吗?
最佳答案
如果您想选择“多个”值,您需要将它们指定到查询构建器的选择方法中。就像下面报道的一样
$builder = $this->createQueryBuilder('a')
->select('COUNT(u) AS HIDDEN nbrLikes', 'a.id')
->leftJoin('a.likedByUsers', 'u')
->orderBy('nbrLikes', 'DESC')
->groupBy('a.id')
->getQuery()
->getResult();
你必须记住结果不是一个实体而是一个关联数组
如果你想要完整的实体
$builder = $this->createQueryBuilder('a')
->select('COUNT(u) AS HIDDEN nbrLikes', 'a')
->leftJoin('a.likedByUsers', 'u')
->orderBy('nbrLikes', 'DESC')
->groupBy('a')
->getQuery()
->getResult();
关于php - Doctrine2,按多对多属性的计数获取实体顺序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29512078/