我有两个实体
文章与名为' likesByUsers'
的用户有关系现在,我想通过喜欢的数量订购文章,但是:
我目前拥有的是:
$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
任何想法?
答案 0 :(得分:6)
如果要选择“多个”值,则需要将它们指定为查询构建器的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();
答案 1 :(得分:0)
您可以查看2个功能:
->addSelect
创建queryBuilder时(我相信)哪个不起作用,但应该按照以下方式使用。
您也可以这样使用基本查询构建器:
$query = $this->getEntityManager()->createQueryBuilder()
->select('article, nbrLikes, ...')
->from('BundleName:ClassName', 'article')
->leftJoin('article.likedByUsers', 'nbrLikes')
这将始终选择并填充选择中的实体。您也可以进行部分选择以避免获得必要的字段。 这绝对不是一个解决方案,但可能会指出你正确的方向。