2016-09-07 2 views
1

Это функция Доктрина RepositoryDoctrine2 DQL Синтаксическая ошибка при заказе по количеству

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; 

Когда я выполняю этот код, я получаю ошибку

Error: Expected end of string, got '('

QueryException: SELECT ar.articleId, COUNT(ar) FROM SciProfileBundle\Entity\ProfileArticleReads ar WHERE ar.authorId = :userId GROUP BY ar.articleId ORDER BY COUNT(ar) DESC

ответ

1

THED count funtion принять поле, поэтому попробуйте с

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; 
} 

Надежда эта помощь

+0

Спасибо Матео :) –