Symfony 3 - Доктрина - Трудности на большом запросе - PullRequest
1 голос
/ 24 апреля 2019

Я раздражен из-за большого запроса, который идет немного во всех направлениях.

Она будет использовать несколько таблиц:

  • Пользователь
  • пакет
  • Тип пользователя
  • PackageDDLExternal (с внешним ключом User.id и Package.id, к которому я добавил атрибут даты)

Цель этого запроса - вернуть список, который будет содержать:

Различные существующие пакеты с количеством загрузок за определенный период, с заданным порядком (ASC или DESC) по количеству загрузок, и все это в зависимости от типов пользователей, чья таблица идентификаторов прошла как параметр.

Итак, я:

Пакет:

enter image description here

Тип Utilisateur:

enter image description here

Пользователь:

enter image description here

Соотношение много-много-много между TypeUtilisateur и Paquet:

enter image description here

И Пакет DDLExternal:

enter image description here

Итак, я уже пытался создать этот запрос, но, похоже, есть ошибки синтаксиса с одной стороны (на уровне добавления порядка) и другие вещи, которые, кажется, блокируют ...

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 стоит этого:

enter image description here

1 Ответ

3 голосов
/ 24 апреля 2019

Используйте псевдоним:

->select("pa.titre, count(p.package) as total")

Заказ по псевдониму:

->orderBy("total", $ordre)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...