由于公司业务需要多次预加载(3次以上),所以就去查了一些资料,最后还是问了别人才知道了如何多次预加载,下面展示下 1-4次预加载的方法。
1次预加载: 这个大家应该都会一次preload(从post预加载与他相关的comments)
posts = Post
|> Repo.all
|> Repo.preload([:comments])
2次预加载: 稍微复杂一丢丢(先从 person加载到post,再加载到comments)
person = Person
|> Repo.all
|> Repo.preload(posts: from(p in Post, preload: [:comments]))
3次预加载: 再次复杂一些(先从group到person到post到comments)
group = Group
|> Repo.all
|> Repo.preload([persons: from(pe in Person,
join: p in assoc(pe, :post),
join: c in assoc(p, :comments),
preload: [post: {p, comments: c}])])
4次预加载: 大家可以从3次和4次中发现多次预加载的规律(同样先从system到group到person到post到comments)
system = System
|> Repo.all
|> Repo.prepreload([group: from(g in Group,
join: pe in assoc(g, :person),
join: p in assoc(pe, :post),
join: c in assoc(p, :comments),
preload: [person: {pe, post: {p, comments: c}}]
)])
说明: 因为数据是自己编的,所以在具体使用时,关联主要参照所建数据表与model中的填写为准,欢迎留言探讨。谢谢。