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

Laravel中LIKE查询无法匹配预期数据库记录,求问题排查

问题分析与解决方法

你的查询逻辑完全搞反了,这是导致无结果的核心原因:

当前代码是查询name字段包含B-Frontliner的记录,但数据库里的两条记录B-Front和Frontliner,都只是B-Frontliner的一部分——反过来是B-Frontliner包含这两个值,而非name包含B-Frontliner。

正确的查询方式

以下两种方法都能实现你的需求(匹配所有name值被B-Frontliner包含的记录):

方法1:使用MySQL的LOCATE函数

$string = 'B-Frontliner';
$results = Artist::whereRaw("LOCATE(name, ?) > 0", [$string])->get();

LOCATE(name, ?)会返回name在目标字符串中的起始位置,大于0则表示存在匹配。

方法2:使用正则表达式匹配

$string = 'B-Frontliner';
$results = Artist::whereRaw("? REGEXP CONCAT('.*', name, '.*')", [$string])->get();

通过拼接正则规则,判断目标字符串是否包含任意一条name的值。

忽略大小写的处理

如果需要忽略大小写匹配,可以对字段和目标字符串统一转小写:

$results = Artist::whereRaw("LOCATE(LOWER(name), LOWER(?)) > 0", [$string])->get();

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.21 16:43:14