美文网首页
phoenix爬坑日记(2)-- 多次预加载

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

作者: 瑶瑶大大万岁 | 来源:发表于2017-04-10 08:59 被阅读0次

    由于公司业务需要多次预加载(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)-- 多次预加载

          本文链接:https://www.haomeiwen.com/subject/hfdcattx.html