Doctrine orm 使用联接表将SQL转换为DQL(Doctrine2)
存在类似的问题,但我发现没有人提到静默联接表问题 我有一个带有联接的简单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 !=
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”,这很好。非常感谢。验证