Witam.
Mam następującą sytuację: posiadam encję User powiązaną relacją 1-n z encją Post. Teraz chcę wylistować danych użytkowników posortowanych według pewnych kryteriów - jednym z tych kryteriów jest liczba postów danego użytkownika. W SQL'u wyglądałoby to dokładnie tak (działa idealnie):
SELECT user.*, COUNT(post.id) AS posts
FROM user LEFT JOIN post ON user.id = post.author_id
GROUP BY user.id ORDER BY posts DESC
Mój QueryBuilder wygląda natomiast tak:
$query = $this->createQueryBuilder('u')
->Where('u.username LIKE :input')
->orWhere('u.surname LIKE :input')
->orWhere('u.forename LIKE :input')
->setParameter('input', '%'.$input.'%');
if($sort == 'createDate')
{
$query->orderBy('u.'.$sort, 'ASC');
}
else
{
// jednym z wariantów $sort jest właśnie 'posts'
$query->leftJoin('u.'.$sort, 'p')
->select('u, count(p.id) as '.$sort)
->groupBy('u.id')
->orderBy($sort, 'DESC');
}
return $query->getQuery();
Zapytanie zwracane przez metodę jest potem wykorzystywane przez paginator. Niestety, wywala mi błąd "Key "id" for array with keys "0, posts" does not exist." w następującym miejscu mojego widoku (przed dodaniem nowych kryteriów sortowania - innych niż 'createDate' - działało):
<a href="{{ path('user', {'user': user.id}) }}">
Moje pytanie: jak poprawnie skonstruować takiego QueryBuildera? Byłbym wdzięczny za pomoc.