我在哪里
对于这个例子,考虑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
变量进行某种类型的转换。此处的文档中提到了:“当插值时,您可能需要明确告诉 Ecto 被插值的预期类型是什么”
我需要的
对于这样的复杂类型,我该如何实现?如何为“元组列表,每个大小为 2”键入 cast?[{:integer, :integer}] 之类的东西似乎不起作用。
如果不是上述情况,WHERE (col1, col2) in ((val1, val2), (val3, val4), ...)
使用 Ecto Query 运行某种查询的任何替代方法?