使用非大写字母的 Laravel/PostgreSQL 查询

Posted

技术标签:

【中文标题】使用非大写字母的 Laravel/PostgreSQL 查询【英文标题】:Laravel/PostgreSQL query with non-capitalised letters 【发布时间】:2021-10-26 04:40:54 【问题描述】:

我正在做一个 Laravel CRUD 练习,并且我已经在控制器中设置了搜索路由:

public function search($name)
    
        return Product::where('name', 'like', '%'.$name.'%')->get();
    

在后端 psql 数据库中,我有一个与 iPhone 11 完全相同的项目名称。

当我对邮递员进行查询时,如果我通过localhost:8000/api/products/search/iPh GET 运行良好。但是,如果我将其取消大写为...search/iph,它将返回一个空数组。

所以我的问题是,我该怎么做才能在存储的数据包含大写字母时使用非大写字母进行搜索?

【问题讨论】:

【参考方案1】:

对于 mysql,您可以使用原始查询

Product::whereRaw("UPPER(name) LIKE '%'". strtoupper($name)."'%'")->get(); 

对于 pgSQL,您可以使用 ILIKE 区分大小写,使用 LIKE 区分大小写

Product::where('name', 'ILIKE', '%'.$name.'%')->get();

【讨论】:

好提示!对于这种查询 mysql 和 pgsql 的备忘单,你有什么建议吗? 你可以查看 Laravel 文档。没有这样的备忘单。只有少数查询可能不兼容。你会很容易找到他们的解决方案。

以上是关于使用非大写字母的 Laravel/PostgreSQL 查询的主要内容,如果未能解决你的问题,请参考以下文章

c ++在非字母字符上拆分字符串

非拉丁字母的 Drupal 视图词汇表

Python Vigenere 工作,但我无法使用函数来解释空格和非字母字符

我可以在 Firebase Analytics 事件中使用非英文字母吗?

PHP 正则表达式 - 删除所有非字母数字字符

Python,从字符串中删除所有非字母字符