1

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

我有一个带有连接的简单 SQL 查询,但由于这个连接表,无法将其转换为 DQL。有两个实体,Shop 和 Client,由 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字段。

4

1 回答 1

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

此外,请考虑在没有实体定义的情况下构建此类查询就像在黑暗中射击。下次将问题与问题一起发布。

于 2013-02-05T14:15:50.697 回答