gpt4 book ai didi

elixir - Ecto 中的嵌套预加载

转载 作者:行者123 更新时间:2023-12-01 04:54:58 37 4
gpt4 key购买 nike

我正在尝试在 ecto 中编写一个预加载的嵌套查询 comments从 post 表然后在一个单独的查询中我预加载 user对于每条评论。这看起来像:

post = Repo.preload(Repo.get(Post, id), [:comments])
comments = Repo.preload(post.comments, [:user])

问题在于,当我知道有一种方法可以在一个查询中加载我需要的所有数据时,它会在数据库上运行 3 个不同的查询。

是不是跟 join: assoc()有关吗? ?

最佳答案

(我在这里放了一个迟到的答案,仅供我自己引用。)你可以试试这个:

Repo.preload(Repo.get(Post, id), [{:comments, :user}]).comments

或等效地,以下任一项:
Repo.preload(Repo.get(Post, id), [comments: :user]).comments
Repo.preload(Repo.get(Post, id), comments: :user).comments

This blog post by tkowal对构造嵌套预加载的语法有很好的解释。 This discussion between José Valim and a netizen也很有用。

关于elixir - Ecto 中的嵌套预加载,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38144092/

37 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com