Подзапрос Doctrine2 QueryBuilder с СУММОЙ?

#symfony #doctrine-orm #query-builder

#symfony #doctrine-orm #конструктор запросов

Вопрос:

Я пытаюсь получить отели из своей базы данных, в которых достаточно мест (пользователь указывает параметр количества гостей). Запрос должен выглядеть следующим образом:

 SELECT h.* FROM Hotel AS h
WHERE 
    (SELECT SUM(r.guestCount * r.count) 
    FROM Room AS r 
    WHERE r.hotel_id = h.id) >= $questCount
  

Приведенный выше запрос содержит подзапрос в предложении where . Я прочитал документацию doctrine по QueryBuilder и не знаю, как создать подзапрос в QB.

Все, что у меня есть сейчас, это:

 $qb = $this->getDoctrine()->getEntityManager()->createQueryBuilder()
    ->select('h')
    ->from('AAAHotelsBundle:Hotel', 'h')
    ->where(.........???...........);
  

Есть идеи, что делать дальше?

Конечно, я упростил проблему (сам запрос намного сложнее). Я использую Symfony2.

Ответ №1:

В моем случае DQL не является решением. Мне действительно нужно использовать QueryBuilder. Я задавал тот же вопрос в группах Google, и вот решение:

 $qb = $this->getDoctrine()->getEntityManager()->createQueryBuilder() 
    ->select('h') 
    ->from('AAAHotelsBundle:Hotel', 'h') 
    ->join('Room', 'r') 
    ->groupBy('h') 
    ->having('SUM(r.guestCount * r.count) >= :guestCount') 
    ->setParameter("guestCount", $guestCount); 
  

Ответ №2:

Я думаю, что этот DQL поможет вам

 SELECT h, SUM(r.guestCount * r.count) as TSUM FROM Hotel h JOIN h.room r
WHERE TSUM  >= :questCount