我使用的是带有postgresql的phoenix框架。
为了实现搜索功能,我使用了ilike
ecto查询,所有搜索功能都可以正常工作。例如,我有一个用产品名称搜索产品的功能,效果很好。
def item_searh_results(language_id, name) do
from(p in ItemLanguage, where: p.language_id == ^language_id
and ilike(p.name, ^("%#{name}%")),
select: %{id: p.item_id,
name: p.name}) |> Repo.all
end
我有一个模型,Sales
,它使用uuid
作为主键。
我正在尝试使用ilike
ecto查询api来搜索销售额,就像上面的函数一样。所以我提出了类似的疑问。
from(p in Sales, where: ilike(p.id, ^("%#{id}%")))|> Repo.all
但是,它返回一个错误** (Postgrex.Error) ERROR 42883 (undefined_function): operator does not exist: uuid ~~* unknown
是否可以使用ilike
查询进行搜索?如果是,我在这里做错了什么?
提前谢谢。
我假设您想在UUID的十六进制表示中进行子字符串搜索(例如,"%a%"
应该匹配,"%e%"
不应该匹配015cd1d7-2794-4247-a24f-16b84ca9a3ac
)。您可以通过显式地将UUID值转换为text
,然后执行ilike
:来完成此操作
from(p in Sales, where: ilike(fragment("?::text", p.id), ^"%#{id}%")) |> Repo.all
(我还删除了搜索字符串周围多余的一组括号。)