2011-10-18 69 views
1

我正試圖從我的數據庫中獲得足夠牀位的酒店(用戶指定客人計數參數)。查詢應該看起來像這樣:Doctrine2帶SUM的QueryBuilder子查詢?

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。

回答

0

我認爲這DQL將幫助您

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

DQL是不是在我的情況的解決方案。我確實需要使用QueryBuilder。 我有asked the same question on Google Groups這裏是解決方案:

$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);