[英]Doctrine2 , get entities order by count of a many to many property
我有兩個實體
文章與名為'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
有任何想法嗎 ?
如果要選擇“多個”值,則需要將它們指定為查詢構建器的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();
你可以看看2個功能:
->addSelect
哪個(我相信)在創建queryBuilder時不起作用,但應該按照以下方式使用。
您也可以這樣使用基本查詢構建器:
$query = $this->getEntityManager()->createQueryBuilder()
->select('article, nbrLikes, ...')
->from('BundleName:ClassName', 'article')
->leftJoin('article.likedByUsers', 'nbrLikes')
這將始終選擇並填充選擇中的實體。 您也可以進行部分選擇以避免獲得必要的字段。 這絕對不是一個解決方案,但可能會指出你正確的方向。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.