У меня есть юридическое лицо «Компания» (связанное с «Учетной записью»), которое может иметь несколько «Билетов».
Я хочу попасть в пятерку первых компаний с наибольшим количеством билетов
У меня это пока есть, но это не работает:
public function getByMostTickets($idAccount) {
$qb = $this->createQueryBuilder('c')
->where("c.account = ".$idAccount)
->orderBy("COUNT(c.tickets)", "DESC");
return $qb->getQuery()->getResult();
}
Видимо, не нравится, что я делаю «СЧЁТ» в orderBy.
Ваш запрос работает без "COUNT" в orderBy?
@ DirkJ.Faber это не так!
сначала вам нужно исправить свой запрос, создав правильные объединения. Тогда посмотрите: stackoverflow.com/questions/6000622/…


Вы можете попробовать что-нибудь подобное?
$qb = $this->createQueryBuilder('c')
->join("c.tickets", "t")
->where("c.account = :account_id")
->setParameter("account_id", $idAccount)
->groupBy("c.id")
->orderBy("COUNT(t.id)", "DESC");
[ИЗМЕНИТЬ]
извините, это должно сработать ... Но выгрузите результат, чтобы увидеть, что это вернет ...
$qb = $this->createQueryBuilder('c')
->select("c", "COUNT(t.id) as countTickets")
->join("c.tickets", "t")
->where("c.account = :account_id")
->setParameter("account_id", $idAccount)
->groupBy("c.id")
->orderBy("countTickets", "DESC");
Привет ! Спасибо за помощь :) Все еще та же ошибка, он не хочет, чтобы COUNT был в порядке По-моему ...
[Синтаксическая ошибка] строка 0, столбец 131: Ошибка: ожидаемый конец строки, получено '('
Самый простой способ сделать это - использовать подзапрос для подсчета