使用Ecto,如何构建一个返回两个独立关联中出现的结果的查询?

时间:2016-08-03 20:46:09

标签: elixir phoenix-framework ecto

我们说我有3个架构:Tag,Post,User。

Post和Tag之间有很多关系,连接表,Post和User之间有很多关系,有连接表。

我想选择属于给定标签和给定用户的帖子。

user_posts_query = user |> assoc(:posts)
tag_posts_query = tag |> assoc(:posts)

有什么方法可以组合这两个查询对象,当使用Repo.all()时,只获得每个查询对象的重叠结果?

1 个答案:

答案 0 :(得分:2)

我没有机会测试它,但我认为这样的事情应该有效:

Post
|> join(:inner, [p], u in assoc(p, :users))
|> join(:inner, [p], t in assoc(p, :tags))
|> where([p, u, t], u.id == ^user.id and t.id == ^tag.id)
|> Repo.all()

这可能不是您正在寻找的但可能有用。