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

标签 phoenix-framework ecto

我有两个与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/

相关文章:

postgresql - Ecto, Phoenix : How to update a model with an embeds_many declaration?

elixir - 必填字段不适用于 Phoenix 框架

postgresql - (UndefinedFunctionError) 未定义函数 List.Chars.to_charlist/1

tags - 如何从 .eex 文件调用函数

websocket - 测试客户端 channel 是否收到消息

postgresql - Ecto - 使用自定义逻辑将字段迁移到不同类型的正确方法?

elixir - Ecto:使用 has_many 关联订购集合中的预加载数据

postgresql - 如何在 Phoenix 的 Ecto 查询中按类别选择具有最大日期组的 ID?

elixir - 如何通过查询过滤预加载的记录

elixir - Ecto 模型变更集错误