elixir - 合并两列并搜索它们

标签 elixir ecto

我有这个查询,我们可以在其中根据名字和姓氏 进行搜索。它像这样工作得很好:

  |> where(
  [user],
   ilike(user.first_name, ^string) or (user.last_name, ^string) 
 )

它工作正常。现在我想搜索全名 first_name + last_name。我尝试了 Postgres 的这种方法。如果我在此查询中同时传递名字和姓氏,它将返回空值。

 |> where(
  [user],
   ilike(user.first_name, ^string) or ilike(user.last_name, ^string) or ilike(fragment("(?)||' '||(?)", user.first_name, user.last_name), ^string)
 )

但它不起作用。它没有返回任何结果。 我有什么想念的吗? 谢谢

最佳答案

在这种情况下,[可以说]更常见的方法是使用 Ecto.Query.or_where/3

|> where([user], ilike(user.first_name, ^string))
|> or_where([user], ilike(user.last_name, ^string))
|> or_where([user], ilike(fragment("CONCAT((?), ' ',(?))",
             user.first_name, user.last_name), ^string))

关于elixir - 合并两列并搜索它们,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59369487/

相关文章:

phoenix-framework - 将子模型的 id 插入父模型 Elixir/Phoenix

elixir - 使用ecto存储自定义信息

elixir - Repo 如何计算出表的名称?

elixir - 用ecto计算关联的模型行

elixir - Ecto:使用 has_many 关联订购集合中的预加载数据

elixir - Ecto "left IN right"使用片段查询

elixir - IEx - 如何取消多行命令?

debugging - 如何在phoenix/elixir中快速调试?

elixir - 有没有办法在没有宏的情况下动态构建原子名称?

elixir - 使用 Ecto,如何构建一个查询来返回出现在两个单独关联中的结果?