phoenix-framework - Ecto where like 查询就像 where ==

标签 phoenix-framework ecto

我试图让一个像 ecto 这样的查询工作:

def find(searchterm) do
  query = from c in Contact, 
  #where: fragment("? % ?", c.company_name, ^searchterm),
  where: like(c.company_name, ^searchterm),
  contacts = Repo.all(query)
  {:ok, contacts}
end

在我的表中,我有一个 company_name “Asymptote”。使用 where: like/2 我的查询如下所示:
SELECT c0."id", c0."company_id", c0."company_name" FROM "contacts" AS c0 WHERE (c0."company_name" LIKE $1) ["Asym"] (1.0ms)

当 pg_trm 搜索取消注释时,它看起来像这样:
SELECT c0."id", c0."company_id", c0."company_name" FROM "contacts" AS c0 WHERE (c0."company_name" % $1) ["Asym"] (1.0ms)

据我所知,查询看起来不错,但没有结果。由于我在将“Asymptote”添加到数据库后添加了索引,我希望这就是为什么在 pg_trm 索引中找不到它的原因,但是为什么 like/2 或 ilike/2 不起作用?当输入全名“Asymptote”时,我能够找到记录。

最佳答案

我遇到了一些类似的问题。不幸的是,我没有可用的 pg_trgm。我使用 LIKE 如下:

  from candidate in query,
  where: like(candidate.first_name, ^("%#{text}%"))

这匹配了Candidate.first_name 任何地方的文本。

关于phoenix-framework - Ecto where like 查询就像 where ==,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30228500/

相关文章:

elixir - 如何更新 Ecto 中的关系?

logout - 防止用户注销后使用后退按钮访问上一页

Elixir Ecto 2 : Self-referencing many_to_many and Ecto. Changeset.put_assoc。如何?

elixir - 在伞式应用程序中测试 Ecto 2.0

elixir - Ecto迁移中如何动态更新字段值?

json - 为自引用 Ecto 模型构建 JSON 映射

elixir - Ecto 变更集和多对多关联 "is invalid"错误

elixir - 如何在 <%= for %> View 助手中增加 ID

elixir - 如何让 Phoenix 在客户端连接时自动加入 channel ?

elixir - 如何从连接中获取请求正文?