使用连接表将SQL转换为DQL(Doctrine2)

时间:2013-02-05 14:07:31

标签: doctrine-orm dql jointable

存在类似问题,但我没有提到静默连接表问题。

由于此连接表,我有一个带连接的简单SQL查询但无法将其转换为DQL。有两个实体,商店和客户,由ManyToMany协会链接。

Doctrine2默默地创建了一个连接表:shop_client

现在,如果我想所有不属于某个商店的客户,我可以这样做:

SELECT c.name FROM `client` AS c
JOIN `shop_client` AS sc
    ON sc.client_id = c.id
    AND sc.shop_id != :shop_id

这很简单,非常简单,但我无法想出DQL版本。

我尝试使用“EXISTS”,“NOT IN”,“SIZE”,但最终无法使用正常的DQL查询。

修改:我的商店实体有clients字段,但客户实体没有shops字段。

1 个答案:

答案 0 :(得分:1)

SELECT
    c
FROM
    Client c
WHERE
    c.id IN (
        SELECT
            c2.id
        FROM
            Shop s2
        JOIN
            s2.clients c2
        WHERE
            s2.id != :shopId
    )

另外,考虑在没有实体定义的情况下构建此类查询就像在黑暗中拍摄一样。下次将问题发布给他们。