【问题标题】:Laravel/PostgreSQL query with non-capitalised letters使用非大写字母的 Laravel/PostgreSQL 查询
【发布时间】: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,它将返回一个空数组。

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

【问题讨论】:

    标签: sql laravel postgresql


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 好提示!对于这种查询 mysql 和 pgsql 的备忘单,你有什么建议吗?
    • 你可以查看 Laravel 文档。没有这样的备忘单。只有少数查询可能不兼容。你会很容易找到他们的解决方案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 1970-01-01
    • 2013-09-24
    • 1970-01-01
    • 2022-09-27
    相关资源
    最近更新 更多