Doctrine orm 按计数排序时Doctrine2 DQL语法错误

Doctrine orm 按计数排序时Doctrine2 DQL语法错误,doctrine-orm,dql,Doctrine Orm,Dql,这是原则库功能 public function mostReadArticleByUser($userId){ $total = $this->createQueryBuilder('ar') ->select('ar.articleId', 'COUNT(ar)') ->where('ar.authorId = :userId') ->groupBy('ar.articleId') ->ord

这是原则库功能

public function mostReadArticleByUser($userId){
    $total = $this->createQueryBuilder('ar')
        ->select('ar.articleId', 'COUNT(ar)')
        ->where('ar.authorId = :userId')
        ->groupBy('ar.articleId')
        ->orderBy('COUNT(ar)', 'DESC')
        ->setMaxResults(1)
        ->setParameter('userId', $userId)
        ->getQuery()
        ->getResult();

    return $total;
}
应该与此查询等效

SELECT article_id, count(id)
    FROM profile_article_reads
    WHERE author_id = 2
    GROUP BY article_id
    Order by count(id) DESC
    LIMIT 1;
当我执行这段代码时,我得到一个错误

错误:应为字符串结尾,获取了“(”

QueryException:从中选择ar.articleId、计数(ar) SciProfileBundle\Entity\ProfileArticle读取ar,其中ar.authord= :userId GROUP BY ar.articleId ORDER BY COUNT(ar)DESC


计数函数接受一个字段,因此请尝试

COUNT(ar.id)
而不是:

COUNT(ar)
使用别名进行排序可能更好,例如:

public function mostReadArticleByUser($userId){
    $total = $this->createQueryBuilder('ar')
        ->select('ar.articleId', 'COUNT(ar.id) as total')
        ->where('ar.authorId = :userId')
        ->groupBy('ar.articleId')
        ->orderBy('total', 'DESC')
        ->setMaxResults(1)
        ->setParameter('userId', $userId)
        ->getQuery()
        ->getResult();

    return $total;
}

希望这有帮助

谢谢你,马特奥:)