我正在尝试从我的数据库中获取有足够床位的酒店(用户指定访客计数参数)。查询应如下所示:
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 :(得分: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