0xA*_*ffe 4 elixir ecto phoenix-framework
我有一个类似于这个的ERM:
-------- -------- --------
|ModelA|-----|ModelB|-----|ModelC|
-------- -------- --------
Run Code Online (Sandbox Code Playgroud)
我得到了ModelA及其ModelBs,具体如下:
modela = Repo.get(ModelA,1)
modela = preload(modela, :modelb)
Run Code Online (Sandbox Code Playgroud)
现在我可以访问ModelBs了modela.modelb.但我怎么能预装ModelC呢?当我打印我的modelA时,它说,没有加载modelc.
mic*_*ala 10
您可以传递列表Repo.preload以加载多个关联.您甚至可以传递关键字列表来预加载嵌套关联.我还发现在查询本身加载我需要的所有内容很有用(下面的两个选项是等效的):
query = from m in ModelA, preload: [modelb: :modelc]
Repo.get(query, 1)
Repo.get(ModelA, 1) |> Repo.preload(modelb: :modelc)
Run Code Online (Sandbox Code Playgroud)
您还可以传递元组以{association_name, query}进行高级预编码 - 在许多关联中特别有用,以指定排序.
您可以在文档中阅读有关预加载的更多Ecto.Query.preload/3文档
| 归档时间: |
|
| 查看次数: |
2874 次 |
| 最近记录: |