【发布时间】:2019-12-15 12:26:07
【问题描述】:
我在哪里
对于这个例子,考虑Friends.repo
表Person 具有字段:id、:name、:age
Ecto 查询示例:
iex> from(x in Friends.Person, where: {x.id, x.age} in [{1,10}, {2, 20}, {1, 30}], select: [:name])
当我运行它时,我会得到相关的结果。比如:
[
%{name: "abc"},
%{name: "xyz"}
]
但是当我尝试插入查询时,它会抛出错误
iex> list = [{1,10}, {2, 20}, {1, 30}]
iex> from(x in Friends.Person, where: {x.id, x.age} in ^list, select: [:name])
** (Ecto.Query.CompileError) Tuples can only be used in comparisons with literal tuples of the same size
我假设我需要对 list 变量进行某种类型转换。文档here 中提到了这一点:“在插值时,您可能需要明确告诉 Ecto 所插值的预期类型是什么”
我需要什么
对于这样的复杂类型,如何实现这一点?如何为“元组列表,每个大小为 2”键入 cast? [{:integer, :integer}] 之类的东西似乎不起作用。
如果不是上述情况,是否可以使用 Ecto Query 运行 WHERE (col1, col2) in ((val1, val2), (val3, val4), ...) 类型的查询?
【问题讨论】:
标签: mysql erlang elixir ecto elixir-iex