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;
}
希望这有帮助谢谢你,马特奥:)