由于公司業(yè)務(wù)需要多次預(yù)加載(3次以上)伤极,所以就去查了一些資料法希,最后還是問(wèn)了別人才知道了如何多次預(yù)加載涛菠,下面展示下 1-4次預(yù)加載的方法惦辛。
1次預(yù)加載: 這個(gè)大家應(yīng)該都會(huì)一次preload(從post預(yù)加載與他相關(guān)的comments)
posts = Post
|> Repo.all
|> Repo.preload([:comments])
2次預(yù)加載: 稍微復(fù)雜一丟丟(先從 person加載到post注盈,再加載到comments)
person = Person
|> Repo.all
|> Repo.preload(posts: from(p in Post, preload: [:comments]))
3次預(yù)加載: 再次復(fù)雜一些(先從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次預(yù)加載: 大家可以從3次和4次中發(fā)現(xiàn)多次預(yù)加載的規(guī)律(同樣先從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}}]
? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? ? )])
說(shuō)明: 因?yàn)閿?shù)據(jù)是自己編的,所以在具體使用時(shí)魄健,關(guān)聯(lián)主要參照所建數(shù)據(jù)表與model中的填寫(xiě)為準(zhǔn)虚婿,歡迎留言探討旋奢。謝謝。