我有两个实体
文章与名为“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
有任何想法吗 ?
如果您想选择“多个”值,则需要将它们指定到查询构建器的 select 方法中。就像下面报道的那样
$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();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)