我如何预加载关联并将其返回到ecto?

时间:2016-10-06 13:00:14

标签: elixir ecto

假设我有一个User模型has_many Post

我抓了一个用户:

user = Repo.get(User, 1)

现在我想获得此用户的所有帖子。我找到的唯一解决方案是:

posts = Repo.preload(user, :posts).posts

但它很难看。那有什么简写吗?

3 个答案:

答案 0 :(得分:5)

您可以使用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]
...

答案 1 :(得分:2)

class Child extends Component{
    render(){
       <div onClick={this.props.someFn(this, data)}>

       </div>
    }
}

答案 2 :(得分:1)

user = Repo.get(User, 1) |> preload(:posts)

是您案件的简写