我的项目中有很多级别的模型关系。在控制器中我有这个:
var1 = Repo.get!(Model1, 123) |> Repo.preload([child_items1: :child_items2])
这很好但我必须更深入一级。
即每个child_items2
多个child_items3
。现在,我如何为每个child_items3
预加载child_items2
?
答案 0 :(得分:0)
我通常使用范围。例如,在我的模型(1)中,我将有一个预加载Model2的with_model2
函数。所以要连续加载3个关联,我会有类似的东西:
def with_model2(query \\ __MODULE__) do
from query, preload: [model2: ^Model2.with_model3]
end
我的模特(1)。然后你明白了,Model2会有
def with_model3(query \\ __MODULE__) do
from query, preload: :model3
end
我实际上从来没有达到过3级,但我只是假设它会起作用。
答案 1 :(得分:0)
对于其他人: documentation实际上说: 嵌套关联也可以两种格式预加载:
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}]