2

对于初学者,它不是Doctrine 2 JOIN ON error的副本。我确实得到了,Expected end of string, got 'ON'但使用WITH并不能解决我的问题。

那里的问题与我的相似但不同。我不需要向 my添加条件JOIN,我需要用不同的条件替换默认条件。

假设,我们有 2 个假设表:albumartistartist_idFK 指向albumartist。就我而言,我不想让艺术家和他们的专辑一起加入。我想使用一些任意条件列出加入不相关专辑的艺术家。因此,每位艺术家都将加入完全相同的小专辑。相信我,就我而言,这确实是有道理的——我不想完全描述它,因为它太复杂而且超出了我的问题范围。

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,有人使用与我的示例等效的示例作为ONDQL 中的正确用法:

案例二

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而在更标准的情况下还有哪些适用?

4

0 回答 0