所以我读到了Ecto.Query.API.map/2
函数,我有一个场景,我必须使用它。
查询是这样的:
Bundle data = getIntent().getExtras();
if (data != null) {
String pubKey= data.getString("pubKey");
}
而不是 from p in model,
where: p.id == 1,
select: map(p, [:id, :inserted_by, customer: [:id, :first_name]])
和id
,它们是硬编码的inserted_by
和id
。我想在像这样的列表中使用动态值
first_name
我尝试通过在变量中保存列表来使用 [:id, :inserted_by, :first_name]
运算符。但它给出了错误^
如何更改动态值的查询?
像这样
cannot use outside of match clause
感谢。
答案 0 :(得分:1)
官方Ecto
文件按字面意思回答了这个问题的第二句话:
Ecto.Query.API.map/2
也可用于动态选择字段:fields = [:title, :body] from p in Post, select: map(p, ^fields)
在你的情况下会是:
dynamic_value = [:id, :inserted_by, customer: [:id, :first_name]]
from p in model,
where p.id == 1,
select: map(p, ^dynamic_value)
预先定义dynamic_value
的问题是:from
简而言之是一个宏,它内部有一个复杂的逻辑,它接受准备好的AST。