我有两个与has_many和belongs_to相关联的模型。 使用Repo.preload加载工作正常,但我注意到孩子没有关联回父母 - 看到Ecto.Association.NotLoaded。
我是否还必须将子协会预先加载回父母? 有没有办法让这两个关联从父预载调用链接起来?
(我正在使用Ecto 2.0 rc5。)
答案 0 :(得分:2)
我是否还必须将子协会预先加载回父母?有没有办法让这两个关联从父预载调用链接起来?
由于Elixir Maps(以及因此Structs)是不可变的,因此不可能在其中包含循环,这是您需要从子项到其父项的引用。
我通常解决这个问题的方法是将父项与子项一起显式传递给任何需要访问它们的函数,或者预加载一个更多级别的关联(但如果你已经拥有父关联,这种方法会浪费内存加载到某处):
Repo.get(Post, 1) |> Repo.preload([comments: [:post]])
这会使Post
的所有评论都嵌入Post
的副本(但这些帖子不会加载他们的评论)。