带有SUM的Doctrine2 QueryBuilder子查询?

时间:2011-10-18 14:21:08

标签: symfony doctrine-orm query-builder

我正在尝试从我的数据库中获取有足够床位的酒店(用户指定访客计数参数)。查询应如下所示:

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。

2 个答案:

答案 0 :(得分: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); 

答案 1 :(得分:0)

我认为这个DQL会帮助你

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