Doctrine orm 是否可以转换为DQL或条令查询生成器
我有3个带列的表Doctrine orm 是否可以转换为DQL或条令查询生成器,doctrine-orm,doctrine,query-builder,Doctrine Orm,Doctrine,Query Builder,我有3个带列的表 A: id B: id a_id C: id b.id 使用本机查询: SELECT a.id, b.id, c.id FROM A as a LEFT JOIN B as b INNER JOIN C as c ON b.id = c.b_id ON a.id = b.a_id 我试过了 SELECT a.id, b.id, c.id FROM App\HomeBundle\Entity\A as a
A:
id
B:
id
a_id
C:
id
b.id
使用本机查询:
SELECT a.id, b.id, c.id
FROM A as a
LEFT JOIN B as b
INNER JOIN C as c ON b.id = c.b_id
ON a.id = b.a_id
我试过了
SELECT a.id, b.id, c.id
FROM App\HomeBundle\Entity\A as a
LEFT JOIN App\HomeBundle\Entity\B as b
INNER JOIN App\HomeBundle\Entity\C as c
ON c.id = c.bId
ON a.id = b.aId
我得到一个错误:
Error: Expected Literal, got 'JOIN'
是否可以将本机查询转换为DQL或查询生成器?如果可能的话,它会是什么样子?这只是一个猜测,但对于评论来说太长了。如果我完全错了,我会删除这个答案 假设您的本机查询在语法上是正确的,那么MySQL可能正在对
b
和c
之间的内部联接的结果应用最后一个ON
条件。如果这是真的,看看这是否会给你同样的结果:
SELECT a.id, b.id, c.id
FROM App\HomeBundle\Entity\A as a
LEFT JOIN (
SELECT bx.aID
FROM App\HomeBundle\Entity\B as bx
INNER JOIN App\HomeBundle\Entity\C as c
ON bx.id = c.bId
) b
ON a.id = b.aId
注意:我纠正了我认为您尝试的解决方案中的错误(您在c.id=c.bId上说了)。这是一个老问题,但我认为您需要加入关系,而不是实体
例如,代替
SELECT a
FROM Entity\A as a
LEFT JOIN Entity\B as b
应该是:
SELECT a
FROM Entity\A as a
LEFT JOIN a.entityB as b
若不清楚,a.entityB是一个实体的属性,称为“entityB”。该属性定义了A和B之间的关系
当你们只是一个实体接一个实体的时候,条令并不知道它们是如何关联的。但是,如果您基于属性加入,则可以使用注释(或其他映射)为了确定A和B的关系。在使用条令时,我总是必须使用WITH
关键字,而不是ON
上的。尝试将上的最后一个子句移动到左JOIN
子句后的适当位置。正如所写的,它在语法上看起来不正确。是的,我已经试过了。但我得到的结果与本机查询不同。根据,我认为用条令进行此查询是不可能的。我运气不好,我尝试了你的解决方案。它可以在本机SQL上工作,但在DQL上没有成功。我得到一个错误:错误:类“(”未定义。正好在“左连接(”。我认为doctrine join表达式不了解子查询是什么,所以它像类/实体一样处理。哦,抱歉。正如我所说,这只是一个猜测;我不知道doctrine。您可能需要删除MySQL标记并澄清您的问题,以便清楚您的问题只与doctrine有关。无论如何,我会留下这个答案;可能会帮助某人else with a real solution.mysql标记已删除。感谢您的帮助。我对此表示感谢。:DI也尝试加入select语句的结果,但它在DQL中不起作用。我相信这是因为DQL是一种实体查询语言,用于与彼此相关的实体交互,不允许使用temp tab的原始查询les等。请看我的相关问题:也许我对你的答案的解释是错误的。但是,如何查询一个与属性本身连接的实体呢?很抱歉,响应太晚了。请给我更详细的解释。除了DQL似乎使用with
关键字,而不是ON
。在MySQL中,我会使用<代码>打开
在DQL中,我将与