学说加入 WITH 与 WHERE
Doctrine join WITH vs WHERE
我正在加入多个表,我找到了两个解决方案。我无法弄清楚有什么区别。谁能告诉我?
解决方案 1:
$query = $entityManager->createQuery("
SELECT m FROM Model m
JOIN m.battery b
JOIN m.camera c
JOIN m.connectivity co
JOIN m.hardware h
JOIN m.screen s
JOIN m.sensor se
WHERE b = m.battery
AND c = m.camera
AND co = m.connectivity
AND h = m.hardware
AND s = m.screen
AND se = m.sensor"
);
解决方案 2:
$query = $entityManager->createQuery("
SELECT m FROM Model m
JOIN m.battery b
WITH m.battery = b
JOIN m.camera c
WITH m.camera = c
JOIN m.connectivity co
WITH m.connectivity = co
JOIN m.hardware h
WITH m.hardware = h
JOIN m.screen s
WITH m.screen = s
JOIN m.sensor se
WITH m.sensor = se
");
据我所读,我可以说:
当您在加入中使用 Where
而不是 On
时,有一个区别,On
将在选择之前应用,而 Where
将在选择过程之后应用join.
WITH
类似于 On
子句,它允许您在 On
之外指定另一个条件。
所以我认为当你使用With
时,它会像ON
一样工作,但是Where
会消除Join
选择后的结果。
它可能有帮助:Stack Overflow:
this题的选答也用了其中两个连同解释。
您正在写 DQL
,您不应将其与 SQL
混淆。在 DQL
查询连接中,您不需要将 id
字段显式添加到连接 Doctrine 会为您处理。
"SELECT m FROM Model m JOIN m.battery b"
就够了。
到 fetch-join
将 b
添加到您的 select 子句:
"SELECT m, b FROM Model m JOIN m.battery b"
如果你只想加入某个属性的电池,那就是你需要在你的DQL
中使用WITH
子句。例如,仅加入电池 status
为 empty
:
的电池
"SELECT m, b FROM Model m JOIN m.battery b WITH b.status = 'empty'"
查看 the documentation on DQL joins 了解更多信息。
我正在加入多个表,我找到了两个解决方案。我无法弄清楚有什么区别。谁能告诉我?
解决方案 1:
$query = $entityManager->createQuery("
SELECT m FROM Model m
JOIN m.battery b
JOIN m.camera c
JOIN m.connectivity co
JOIN m.hardware h
JOIN m.screen s
JOIN m.sensor se
WHERE b = m.battery
AND c = m.camera
AND co = m.connectivity
AND h = m.hardware
AND s = m.screen
AND se = m.sensor"
);
解决方案 2:
$query = $entityManager->createQuery("
SELECT m FROM Model m
JOIN m.battery b
WITH m.battery = b
JOIN m.camera c
WITH m.camera = c
JOIN m.connectivity co
WITH m.connectivity = co
JOIN m.hardware h
WITH m.hardware = h
JOIN m.screen s
WITH m.screen = s
JOIN m.sensor se
WITH m.sensor = se
");
据我所读,我可以说:
当您在加入中使用 Where
而不是 On
时,有一个区别,On
将在选择之前应用,而 Where
将在选择过程之后应用join.
WITH
类似于 On
子句,它允许您在 On
之外指定另一个条件。
所以我认为当你使用With
时,它会像ON
一样工作,但是Where
会消除Join
选择后的结果。
它可能有帮助:Stack Overflow:
this题的选答也用了其中两个连同解释。
您正在写 DQL
,您不应将其与 SQL
混淆。在 DQL
查询连接中,您不需要将 id
字段显式添加到连接 Doctrine 会为您处理。
"SELECT m FROM Model m JOIN m.battery b"
就够了。
到 fetch-join
将 b
添加到您的 select 子句:
"SELECT m, b FROM Model m JOIN m.battery b"
如果你只想加入某个属性的电池,那就是你需要在你的DQL
中使用WITH
子句。例如,仅加入电池 status
为 empty
:
"SELECT m, b FROM Model m JOIN m.battery b WITH b.status = 'empty'"
查看 the documentation on DQL joins 了解更多信息。