未加载返回到父级的子级关联

Teo*_*ing 2 ecto phoenix-framework

我有两个与 has_many 和 Belongs_to 相关的模型。使用 Repo.preload 加载工作正常,但我注意到子级没有与父级的关联 - 看到 Ecto.Association.NotLoaded。

我是否也必须将子关联预加载回父关联?有没有办法让两个关联从父预加载调用链接起来?

(我使用的是 Ecto 2.0 rc5。)

Dog*_*ert 5

我是否也必须将子关联预加载回父关联?有没有办法让两个关联从父预加载调用链接起来?

由于 Elixir 映射(以及结构)是不可变的,因此其中不可能有循环,而这正是您需要从子级返回其父级的引用。

我通常解决此问题的方法是将父级与子级一起显式传递给需要访问两者的任何函数,或者预加载一层关联(但如果您已经在某处加载了父级关联,则这种方法会浪费内存) :

Repo.get(Post, 1) |> Repo.preload([comments: [:post]])
Run Code Online (Sandbox Code Playgroud)

这将使所有评论都有嵌入其中Post的副本Post(但这些帖子不会加载评论)。