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])
,让我们看看会发生什么。对我来说是有效的!这应该是一个答案而不是一个注释