假设我有一个User
模型has_many
Post
。
我抓了一个用户:
user = Repo.get(User, 1)
现在我想得到这个用户的所有帖子。我找到的唯一解决方案是:
posts = Repo.preload(user, :posts).posts
但它很难看。那有什么简写吗?
您可以使用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]
...
user = Repo.get(User, 1) |> Repo.preload([:posts])
user = Repo.get(User, 1) |> preload(:posts)
是你的情况的简写