获取在where子句中使用的联接值模式

时间:2019-11-27 23:24:52

标签: elixir ecto

是否可以使用联接值模式在where子句中使用?

filtered = [name: "show", name: "comedy"]
query = from s in Core.Serie, join: t in assoc(s, :tags), where: ^filtered 

结果是下一个

#Ecto.Query<from s in Core.Serie, join: t in assoc(s, :tags),
 where: s.name == ^"show" and s.name == ^"comedy">

我需要使用标签架构来匹配正确的记录,但是默认情况下使用Serie架构。例如

#Ecto.Query<from s in Core.Serie, join: t in assoc(s, :tags),
 where: t.name == ^"show" and t.name == ^"comedy">

1 个答案:

答案 0 :(得分:1)

我首先怀疑t.name == ^"show" and t.name == ^"comedy"是您想要的,主要是因为它从未匹配(name不能同时是"show" {{1} }同时出现。我猜您想在那里"comedy"

为此,我们拥有Ecto.Query.or_where/3,可以像下面那样减少过滤条件。

or

我还没有测试代码,但是应该可以立即使用。


此外,您可能希望使用Ecto.Query.API.in/2对具有相同键的过滤器进行分组。