You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel大小写不敏感搜索问题:搜索water需返回WATER结果

实现大小写不敏感的搜索问题

你希望搜索“water”时能返回包含“WATER”的结果,但当前代码无法实现,你的代码如下:

$value = "water";
$categories = Category::where(DB::raw('LOWER(`title`)'), 'like', '%' . Str::lower($value) . '%')->get();

解决方案

以下几种方法可以实现大小写不敏感的搜索:

  • 利用数据库默认不区分大小写的排序规则
    如果你的categories表title字段使用的是utf8mb4_general_ci或utf8mb4_unicode_ci这类不区分大小写的排序规则(MySQL默认通常为这类),可以直接简化查询,无需手动转换大小写:

    $value = "water";
    $categories = Category::where('title', 'like', "%{$value}%")->get();
    
  • 针对区分大小写的排序规则优化查询
    如果数据库使用的是utf8mb4_bin这类区分大小写的排序规则,你可以保持大小写转换逻辑,改用更简洁的whereRaw写法:

    $value = "water";
    $categories = Category::whereRaw('LOWER(title) LIKE ?', ["%".Str::lower($value)."%"])->get();
    

    也可以通过指定COLLATE强制使用不区分大小写的规则查询:

    $value = "water";
    $categories = Category::where('title', 'like', "%{$value}%")->collate('utf8mb4_general_ci')->get();
    

排查当前代码未生效的可能原因

如果数据库排序规则是区分大小写的,当前代码理论上应该能生效(因为将字段和搜索值都转为了小写),若仍无结果,可检查:

  • title字段是否确实包含“WATER”或其他大小写形式的目标字符串
  • 数据库连接的字符集设置是否正确,避免转换过程中出现编码问题

内容的提问来源于stack exchange,提问作者Babak Rostami

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.05 17:32:39