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

Laravel中LIKE查询条件失效问题排查与解决

问题排查与解决步骤
  • 修正关键词与数据库内容的核心差异
    数据库里的标题是Arun To Raise Up To $400 Million Via Corporate Bonds,但你的搜索关键词少了$符号,还多了一个空格(To和400之间是两个空格),这是匹配失败的直接原因。

    • 先统一格式:把关键词改成'Arun To Raise Up To 400 Million Via Corporate Bonds'(去掉多余空格);如果想忽略$符号匹配,用数据库函数处理字段后再查询:
      // MySQL示例:去除标题中的$后再匹配
      $cleanKeyword = str_replace('$', '', $id);
      News::whereRaw("REPLACE(title, '$', '') LIKE ?", ['%' . $cleanKeyword . '%'])->get();
      
  • 处理空格与大小写问题
    空格数量不一致、数据库大小写敏感都可能导致匹配失败:

    • 合并关键词中的连续空格:
      $cleanId = preg_replace('/\s+/', ' ', trim($id));
      
    • 同时处理数据库字段的空格后再匹配:
      // MySQL用REGEXP_REPLACE合并字段里的连续空格
      News::whereRaw("REGEXP_REPLACE(title, '\\s+', ' ') LIKE ?", ['%' . $cleanId . '%'])->get();
      
    • 如果数据库大小写敏感,用不区分大小写的查询:
      // Laravel自带的ilike(适配PostgreSQL/MySQL)
      News::where('title', 'ilike', '%' . $cleanId . '%')->get();
      // 或者MySQL用LOWER统一转小写
      News::whereRaw("LOWER(title) LIKE LOWER(?)", ['%' . $cleanId . '%'])->get();
      
  • 调试实际执行的SQL
    把生成的SQL打印出来,直接在数据库客户端执行,快速定位问题:

    $query = News::Where('title', 'like', '%' . $id. '%');
    dd($query->toSql(), $query->getBindings()); // 输出SQL语句和绑定的参数
    
  • 用全文搜索替代like(长期方案)
    like模糊查询效率低且容易踩格式坑,推荐用数据库全文索引:

    1. 先给title字段加全文索引(在迁移文件中):
      $table->text('title')->fulltext();
      
    2. 使用全文搜索查询:
      News::whereFullText('title', $cleanId)->get();
      

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.23 18:12:18