1

データベースから十分なベッドがあるホテルを取得しようとしています (ユーザーはゲスト数パラメーターを指定します)。クエリは次のようになります。

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 を使用しています。

4

2 に答える 2

2

私の場合、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); 
于 2011-10-20T08:38:23.900 に答える
0

このDQLが役立つと思います

SELECT h, SUM(r.guestCount * r.count) as TSUM FROM Hotel h JOIN h.room r
WHERE TSUM  >= :questCount
于 2011-10-19T06:37:50.880 に答える