@Bovv

Как правильно реализовать вложенные запросы?

Необходимо подсчитать количество элементов, возвращаемых в подзапросе. Если подзапрос записать руками - всё отрабатывает отлично, но если попытаться построить запрос через QueryBuilder - получаем ошибку.

Подзапрос записан вручную:
$qb3 = $this->createQueryBuilder('c')
                   ->select('COUNT(c.id)')
                   ->where('c.id IN (SELECT cl.id FROM Acme\AppBundle\Entity\ClassC cl INNER JOIN Acme\AppBundle\Entity\ClassP p WHERE p.var1 = :var1 AND p.var2 = cl.id GROUP BY cl.id)')
                   ->setParameter('var1', $var);


Подзапрос построен через QueryBuilder:
$qb = $this->createQueryBuilder('c');
$qb->select('COUNT(c.id)')
      ->where(
          $qb->expr()->in(
              'c.id',
              $this->createQueryBuilder('cl')
                      ->select('cl.id')
                      ->innerJoin('Acme\AppBundle\Entity\ClassP', 'p')
                      ->where('p.var1 = :var1')
                      ->setParameter('var1', $var)
                      ->andWhere('p.var2 = cl.id')
                      ->groupBy('cl.id')
                      ->getDQL()
         )
     );


Оба вариант возвращают абсолютно одинаковый DQL.

44ba2bd0239945b0831ffdd9fa9d3590.png
  • Вопрос задан
  • 1864 просмотра
Решения вопроса 1
BoShurik
@BoShurik Куратор тега Symfony
Symfony developer
Перенесите инициализацию параметров для вложенного билдера в родительский:
$qb->setParameter('var1', $var)
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы