Laravel对接PostgreSQL如何实现不区分大小写的模糊搜索
PostgreSQL大小写不敏感模糊搜索解决方案
你遇到的问题核心原因是PostgreSQL默认的LIKE操作符为大小写敏感模式,当搜索参数和数据库存储内容的大小写不一致时无法命中结果,可选择以下任意方案调整:
- 方案1:使用PostgreSQL专属的大小写不敏感匹配操作符
ILIKE,代码改动量最小:
public function search($name) { return Product::where('name', 'ilike', '%'.$name.'%')->get(); }
- 方案2:将数据库字段值和搜索参数统一转为小写后再匹配,兼容性更强,后续更换MySQL等其他数据库无需调整业务逻辑:
public function search($name) { return Product::whereRaw('LOWER(name) LIKE ?', ['%' . strtolower($name) . '%'])->get(); }
如果产品表数据量较大,频繁触发模糊搜索会出现性能损耗,可执行以下SQL建立小写表达式索引优化查询效率:
CREATE INDEX product_name_lower_idx ON products (LOWER(name));
内容的提问来源于stack exchange,提问作者Beaumont
相关产品推荐
相关产品推荐

