#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