假设我有一个User模型has_many Post.
我抓了一个用户:
user = Repo.get(User, 1)
Run Code Online (Sandbox Code Playgroud)
现在我想得到这个用户的所有帖子.我找到的唯一解决方案是:
posts = Repo.preload(user, :posts).posts
Run Code Online (Sandbox Code Playgroud)
但它很难看.那有什么简写吗?
您可以使用Ecto.assoc/2获取所有帖子的查询,然后将其传递Repo.all/1给实际获取它们:
iex(1)> user = Repo.get(User, 1)
iex(2)> Ecto.assoc(user, :posts)
#Ecto.Query<from p in MyApp.Post, where: p.user_id == ^1>
iex(3)> Ecto.assoc(user, :posts) |> Repo.all
[debug] QUERY OK source="posts" db=2.4ms
SELECT p0."id", p0."title", p0."user_id", p0."inserted_at", p0."updated_at" FROM "posts" AS p0 WHERE (p0."user_id" = $1) [1]
...
Run Code Online (Sandbox Code Playgroud)
user = Repo.get(User, 1) |> Repo.preload([:posts])
Run Code Online (Sandbox Code Playgroud)