phoenix爬坑日记(2)-- 多次预加载

由于公司业务需要多次预加载(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中的填写为准,欢迎留言探讨。谢谢。

你可能感兴趣的:(phoenix爬坑日记(2)-- 多次预加载)