Elixir 体外循环中的三层深层关系——如何预加载
在我的项目中,我有相当多的模型层次关系。在控制器中,我有以下内容:Elixir 体外循环中的三层深层关系——如何预加载,elixir,phoenix-framework,ecto,Elixir,Phoenix Framework,Ecto,在我的项目中,我有相当多的模型层次关系。在控制器中,我有以下内容: var1 = Repo.get!(Model1, 123) |> Repo.preload([child_items1: :child_items2]) 这很好,但我必须更深一层 即每个子项2多个子项3。现在,如何为每个子项2预加载子项3?我通常使用作用域。例如,在我的模型(1)中,我将有一个with_model2函数预加载model2。因此,要连续加载3个关联,我会有如下内容: def with_model2(que
var1 = Repo.get!(Model1, 123) |> Repo.preload([child_items1: :child_items2])
这很好,但我必须更深一层
即每个
子项2
多个子项3
。现在,如何为每个子项2
预加载子项3
?我通常使用作用域。例如,在我的模型(1)中,我将有一个with_model2
函数预加载model2。因此,要连续加载3个关联,我会有如下内容:
def with_model2(query \\ __MODULE__) do
from query, preload: [model2: ^Model2.with_model3]
end
对于我的模型(1)。然后你就明白了,模型2应该
def with_model3(query \\ __MODULE__) do
from query, preload: :model3
end
事实上,我从来没有进入过3级深度,但我只是认为这会起作用。对于其他人:
事实上,报告说:
嵌套关联也可以以两种格式预加载:
Repo.all from p in Post,
preload: [comments: :likes]
或者在一个查询中
Repo.all from p in Post,
join: c in assoc(p, :comments),
join: l in assoc(c, :likes),
where: l.inserted_at > c.updated_at,
preload: [comments: {c, likes: l}]
试试
Repo.get!(model1123)|>Repo.preload([child_items1:[child_items2::child_items3])
,让我们看看会发生什么。对我来说是有效的!这应该是一个答案而不是一个注释