Я раздражен из-за большого запроса, который идет немного во всех направлениях.
Она будет использовать несколько таблиц:
- Пользователь
- пакет
- Тип пользователя
- PackageDDLExternal (с внешним ключом User.id и Package.id, к которому я добавил атрибут даты)
Цель этого запроса - вернуть список, который будет содержать:
Различные существующие пакеты с количеством загрузок за определенный период, с заданным порядком (ASC или DESC) по количеству загрузок, и все это в зависимости от типов пользователей, чья таблица идентификаторов прошла как параметр.
Итак, я:
Пакет:
Тип Utilisateur:
Пользователь:
Соотношение много-много-много между TypeUtilisateur и Paquet:
И Пакет DDLExternal:
Итак, я уже пытался создать этот запрос, но, похоже, есть ошибки синтаксиса с одной стороны (на уровне добавления порядка) и другие вещи, которые, кажется, блокируют ...
public function getPackagesDDLBetween($debut, $fin,$typesUser,$ordre)
{
$qb = $this->createQueryBuilder('p');
$queryBuilder = $qb
->select("pa.titre, count(p.package)")
->join("p.package","pa")
->join("p.user","u")
->where("p.date between :debut and :fin")
->andWhere($qb->expr()->in("u.typeUser", $typesUser[0]))
->groupBy("pa.titre")
->orderBy("count(p.package) :ordre")
->setParameter('debut',$debut)
->setParameter('fin',$fin)
->setParameter('ordre', $ordre);
return $queryBuilder->getQuery()->getResult();
}
Используя $ order, я получаю эту ошибку:
[Синтаксическая ошибка], строка 0, столбец 213: ошибка: ожидаемая известная функция, получено
'Количество'
Но без этого мой результат просто нулевой
Кто-нибудь может мне помочь, пожалуйста?
РЕДАКТИРОВАТЬ: запрос почти хороший. Проблема остается на:
->andWhere($qb->expr()->in("u.typeUser", $typesUser))
Мой $ tabUser стоит этого: