【发布时间】:2022-01-20 14:49:54
【问题描述】:
A.joins(b: :c)
但我希望 (b: :c) 成为 b.left_outer_join(:c)
有什么想法吗?
【问题讨论】:
-
这能回答你的问题吗? How to left join with Arel?
标签: ruby-on-rails arel
A.joins(b: :c)
但我希望 (b: :c) 成为 b.left_outer_join(:c)
有什么想法吗?
【问题讨论】:
标签: ruby-on-rails arel
您可以通过手动附加 b LEFT OUTER JOIN 和 c 来做到这一点:
a = A.arel_table
b = B.arel_table
c = C.arel_table
a
.join(b)
.on(a[:id].eq(b[:a_id]))
.join(c, Arel::Nodes::OuterJoin)
.on(b[:id].eq(c[:b_id])).to_sql
这给了
SELECT
FROM "a"
INNER JOIN "b" ON "a"."id" = "b"."a_id"
LEFT OUTER JOIN "c" ON "b"."id" = "c"."b_id"
【讨论】:
或者……
b = B.arel_table
c = C.arel_table
join_on = b.create_on(b[:c_id].eq(c[:id]))
bc_join = b.create_join(c, join_on, Arel::Nodes::OuterJoin)
result = A.joins(b).joins(bc_join)
【讨论】: