Laravel控制器中Where条件无法匹配省略点号的作者名记录
解决省略点号的作者名搜索问题
问题原因
原代码使用普通的LIKE模糊匹配,当输入不带点的作者名(如F U Umesh)时,数据库中存储的带点作者名(如F. U. Umesh)无法被匹配到——因为%F U Umesh%不会包含F. U. Umesh这种带点的字符串。
解决方案
通过数据库的字符串替换函数,同时处理数据库中的作者名字段和用户输入的关键词,去掉两者的点号后再进行模糊匹配,这样无论输入是否带点,都能匹配到目标数据。
修改后的代码
将原查询中的where条件替换为以下逻辑,完整代码示例如下:
$data['books'] = BookMaster::select('id', 'code', 'title', 'image', 'categories', 'author', 'publisher', 'status') ->where(function ($query) use ($request) { if ($request->has('author')) { // 移除输入关键词中的所有点号,统一搜索格式 $searchAuthor = str_replace('.', '', $request->author); // 数据库层面移除作者名字段的点号后,再进行模糊匹配 $query->whereRaw("REPLACE(author, '.', '') LIKE ?", ['%' . $searchAuthor . '%']); $this->filter_query['author'] = $request->author; } }) ->orderBy('code','asc') ->get();
代码说明
str_replace('.', '', $request->author):先清除用户输入里的所有点号,避免输入格式差异影响匹配REPLACE(author, '.', ''):在数据库查询时,动态移除作者名字段中的所有点号- 基于处理后的关键词和字段进行
LIKE模糊匹配,确保带点/不带点的输入都能匹配到对应记录
内容的提问来源于stack exchange,提问作者Umesh Kumar Yadav
相关产品推荐
相关产品推荐

