mysql - 使用查询生成器进行复杂的连接查询

标签 mysql symfony doctrine-orm query-builder

我正在尝试使用查询生成器编写一个复杂的查询,我需要帮助(我在连接查询方面完全是菜鸟)情况是这样的,我有一个国家/地区表,一个具有country_id关系的酒店表,以及与hotel_id 关系。

所以酒店有国家,促销也有酒店。现在我需要找到属于一组国家/地区的所有促销事件。为此,我需要检查它们所属的酒店是否位于这些国家/地区。

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

最佳答案

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

$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

关于mysql - 使用查询生成器进行复杂的连接查询,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27065565/

相关文章:

mysql - Django ORM : Tried to do inner join with foreign key but causes FieldError

php - Doctrine 认为它已经创建了一个表,但它并没有

mysql - Insert ... on duplicate key update nothing 使用MySQL

mysql - create_engine 问题 mysql 5.7 和 sqlalchemy

MySQL LEFT JOIN 带有 WHERE 子句的查询

php - SonataAdminBundle 继承问题

php - 我如何在 symfony2 中访问 Twig 模板中的存储库函数

php - Symfony LiipImagineBundle : filters not working for big images

php - Doctrine 2 将数据更新到数据库中但不将数据更新到实体中

symfony - 如何避免symfony2自动加载一对一关系