Doctrine2 QueryBuilder подзапрос с помощью SUM? - PullRequest
1 голос
/ 18 октября 2011

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

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.Я прочитал документацию доктрины QueryBuilder и не знаю, как сделать подзапрос в QB.

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

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

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

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

Ответы [ 2 ]

2 голосов
/ 20 октября 2011

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); 
0 голосов
/ 19 октября 2011

Думаю, этот DQL поможет вам

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