当前位置:  开发笔记 > 编程语言 > 正文

具有查询表达式中的动态字段名称的通用可组合Ecto查询

如何解决《具有查询表达式中的动态字段名称的通用可组合Ecto查询》经验,为你挑选了1个好方法。

我试图允许传入一个字段名称并动态地在一个Ecto查询表达式中运行它,如下所示:

def count_distinct(query, field_name) when is_binary(field_name) do
  query
  |> select([x], count(Map.fetch!(x, field_name), :distinct))
end

但是,我收到此编译错误:

(Ecto.Query.CompileError) `Map.fetch!(x, field_name)` is not a valid query expression

有没有办法实现这个目标?



1> Gazler..:

您需要使用field/2在查询中动态生成字段:

query
|> select([x], count(field(x, ^field_name), :distinct))

使用其他查询语法完成的示例:

from x in query,
  select: count(field(x, ^field_name), :distinct)

推荐阅读
小色米虫_524
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有