Doctrine2 中 JOIN ON 和 JOIN WITH 有什么区别?

15

Doctrine2中JOIN ON和JOIN WITH有什么区别?

我在手册中找不到相关信息。

1个回答

18

ON 用于替换原始的连接条件,
WITH 添加条件到原始连接条件。


示例:

[Album] ---OneToMany---> [Track]
  1. Case One

    DQL

    FROM Album a LEFT JOIN a.Track t WITH t.status = 1
    

    Will translate in SQL

    FROM Album a LEFT JOIN Track t ON t.album_id = a.id AND t.status = 1
    
  2. Case Two

    DQL

    FROM Album a LEFT JOIN a.Track t ON t.status = 1
    

    Will translate in SQL

    FROM Album a LEFT JOIN Track t ON t.status = 1
    

1
谢谢您的回答,但我不太明白您的意思,您可以给我提供一个例子吗? - Trent
1
是的,假设您有一个与曲目表(一对多)相关联的专辑表...在DQL中,如果您执行FROM Album a LEFT JOIN a.Track t WITH t.status = 1,它相当于SQL FROM Album a LEFT JOIN Track t ON t.album_id = a.id AND t.status = 1但是,如果您执行FROM Album a LEFT JOIN a.Track t ON t.status = 1,它将相当于SQL FROM Album a LEFT JOIN Track t ON t.status = 1,从而替换关系条件(t.album_id = a.id)。希望我表达清楚! - theredled
我没有编辑答案,因为我不确定我是否完全理解了它,但我认为你可以使用Join::ON来设置自己的连接条件,并且你可以使用Join::WITH来使用实体模型中设置的条件作为起点,然后仅添加额外的子句。至少对我来说,无论如何,在Symfony中Join::ON都无法工作。 - undefined

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接