Ecto:如何动态地为where子句提供字段名称和值?

时间:2017-09-17 21:55:41

标签: elixir phoenix-framework ecto

我尝试创建函数来动态添加过滤器到Ecto查询。 在添加where子句之前,我将连接添加到查询中,因此我使用绑定。 我尝试的是这样的:

def param_to_where(query, field_name, value) do
  query |> where([_a, ..., b], b.field_name == value)
end

但结果查询会尝试将值与" field_name"匹配。不存在的列。如何提供动态参数" field_name"和"价值"查询?

我试过这样:

def param_to_where(query, field_name, value) do
  query |> where([_a, ..., b], b[field_name] == value)
end

这样:

def param_to_where(query, field_name, value) do
  query |> where([_a, ..., b], b.^field_name == value)
end

这样:

def param_to_where(query, field_name, value) do
  query |> where([_a, ..., b], b[^field_name] == value)
end

没有任何效果。 静态查询按预期工作:

  query |> where([_a, ..., b], b.name = "John")

0 个答案:

没有答案