复杂连接查询与查询构建器

时间:2014-11-21 16:06:47

标签: mysql symfony doctrine-orm query-builder

我正在尝试用查询构建器编写一个复杂的查询,我需要帮助(我在加入查询中是一个完整的菜鸟)情况是这样的,我有一个国家表,一个带country_id关系的酒店表,以及促销活动hotel_id relationship。

所以酒店有国家,促销有酒店。现在我需要查找属于一组国家/地区的所有促销活动。为此,我需要检查他们所属的酒店是否在这些国家。

无论如何,有人可以帮助我使用查询构建器构建查询吗?我也会接受mysql查询。

1 个答案:

答案 0 :(得分:1)

假设您已在实体中与@OneToMany@ManyToOne建立关系,并且已将所需的Doctrine集合或国家/地区ID数组填充到$countries中:

$result = $this->getDoctrine()->getManager()->createQueryBuilder()
    ->select('c, h, p')
    ->from('AcmeBundle:Promotion', 'p')
    ->innerJoin('p.hotels', 'h')
    ->innerJoin('h.country', 'c')
    ->where('c IN (:countries)')
    ->setParameter('countries', $countries)
    ->getQuery()
    ->getResult();

生成的SQL最终将类似于:

SELECT c.*, h.*, p.* FROM promotions p
    INNER JOIN hotels h ON p.hotel_id = h.id
    INNER JOIN country c ON h.country_id = c.id
    WHERE c.id IN (?)

请注意,如果没有正确定义您的Doctrine实体,此查询将无效。由于您未提供实体配置,因此我不得不用假设回答您的问题。 Here's some more information on setting up your Database with Doctrine,具体为Entity Relationship mapping