Doctrine orm 使用联接表将SQL转换为DQL(Doctrine2)

Doctrine orm 使用联接表将SQL转换为DQL(Doctrine2),doctrine-orm,dql,jointable,Doctrine Orm,Dql,Jointable,存在类似的问题,但我发现没有人提到静默联接表问题 我有一个带有联接的简单SQL查询,但由于这个联接表,无法将其转换为DQL。有两个实体,商店和客户,由多个关联链接 Doctrine2默默地创建了一个联接表:shop\u client 现在,如果我想获得所有不属于给定店铺的客户,我可以: SELECT c.name FROM `client` AS c JOIN `shop_client` AS sc ON sc.client_id = c.id AND sc.shop_id !=

存在类似的问题,但我发现没有人提到静默联接表问题

我有一个带有联接的简单SQL查询,但由于这个联接表,无法将其转换为DQL。有两个实体,商店和客户,由多个关联链接

Doctrine2默默地创建了一个联接表:
shop\u 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”、“notin”、“SIZE”,但最终无法得到一个有效的DQL查询

编辑:我的店铺实体有一个
客户
字段,但客户实体没有
店铺
字段

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

也可以考虑,在没有实体定义的情况下构建这样的查询就像是在黑暗中进行射击。下次把问题贴出来


也可以考虑,在没有实体定义的情况下构建这样的查询就像是在黑暗中进行射击。下次把问题贴出来。

这几乎奏效了。我把“IN”改为“notin”,把“!=:shopId”改为“=:shopId”,这很好。非常感谢。验证了这几乎有效。我把“IN”改为“notin”,把“!=:shopId”改为“=:shopId”,这很好。非常感谢。验证