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

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();

代码说明

  1. str_replace('.', '', $request->author):先清除用户输入里的所有点号,避免输入格式差异影响匹配
  2. REPLACE(author, '.', ''):在数据库查询时,动态移除作者名字段中的所有点号
  3. 基于处理后的关键词和字段进行LIKE模糊匹配,确保带点/不带点的输入都能匹配到对应记录

内容的提问来源于stack exchange,提问作者Umesh Kumar Yadav

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.18 06:10:22