对于初学者,它不是Doctrine 2 JOIN ON error的副本。我确实得到了,Expected end of string, got 'ON'
但使用WITH
并不能解决我的问题。
那里的问题与我的相似但不同。我不需要向 my添加条件JOIN
,我需要用不同的条件替换默认条件。
假设,我们有 2 个假设表:album
和artist
,artist_id
FK 指向album
到artist
。就我而言,我不想让艺术家和他们的专辑一起加入。我想使用一些任意条件列出加入不相关专辑的艺术家。因此,每位艺术家都将加入完全相同的小专辑。相信我,就我而言,这确实是有道理的——我不想完全描述它,因为它太复杂而且超出了我的问题范围。
SELECT * FROM artist
LEFT JOIN album ON album.some_unrelated_property = 'foo'
上面的例子是原始 SQL(我使用的是 PostgreSQL),在这种形式下工作得很好。
在我的代码中,我使用了查询生成器(很难避免它,因为我的查询更加复杂,并且是通过一系列函数逐步构建的)。导致错误的行是这样的:
$qb->leftJoin('artist.albums', 'aa', Join::ON, 'aa.someUnrelatedProperty = "foo"');
在教义中,我感到恐惧Expected end of string, got 'ON'
。当我使用WITH
而不是ON
它时,它可以正常工作,但正如预期的那样,它会附加artist_id
我不想要的标准连接条件。
在这篇文章中,更让我困惑的是:Doctrine2 中的 JOIN ON 和 JOIN WITH 有什么区别?ON
这解释了 DQL和DQL之间的区别WITH
,有人使用与我的示例等效的示例作为ON
DQL 中的正确用法:
案例二
DQL
FROM Album a LEFT JOIN a.Track t ON t.status = 1
将在 SQL 中翻译
FROM Album a LEFT JOIN Track t ON t.status = 1
我在这里想念什么?使用 DQL 是否有可能实现我想要的?ON
如果不是,那么在 DQL 中存在的原因到底是什么,WITH
而在更标准的情况下还有哪些适用?