我有两个与has_many和belongs_to相关的模型。 使用 Repo.preload 加载工作正常,但我注意到子级没有与父级的关联 -- 看到 Ecto.Association.NotLoaded。
我是否也必须将子关联预加载回父关联? 有没有办法让两个关联从父预加载调用链接起来?
(我使用的是 Ecto 2.0 rc5。)
最佳答案
Do I have to preload the child association back to the parent as well? Is there a way to have the both association linked up from the parent preload call?
由于 Elixir 映射(以及结构)是不可变的,因此其中不可能有循环,而这正是您从子级返回其父级所需的引用。
我通常解决此问题的方法是将父级与子级一起显式传递给需要访问两者的任何函数,或者预加载一层关联(但如果您已经拥有父级关联,则这种方法会浪费内存)加载到某处):
Repo.get(Post, 1) |> Repo.preload([comments: [:post]])
这将使帖子
的所有评论都嵌入帖子
的副本(但这些帖子不会有他们的 评论已加载)。
关于phoenix-framework - 未加载返回到父级的子级关联,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37720985/