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

Laravel 5.5 如何实现数据库搜索功能?附现有代码问题修复指南

现有代码问题梳理
  • 参数获取方式错误:你调用Souscription::get('q')是ORM的查询方法,无法获取前端传入的请求参数,应该通过注入的Request实例$request来获取请求值。
  • 变量未定义:查询条件中使用的$search变量没有在代码中声明赋值,直接调用会抛出变量未定义的错误。
  • 搜索逻辑不匹配:你设置了两个请求参数q(对应手机号)、q1(对应邮箱),但查询条件中却尝试用同一个不存在的$search同时匹配两个字段,和预期的参数接收逻辑完全不符。
  • 参数判断逻辑错误:isset()无法判断空字符串的情况,即使用户没传对应参数,$telephone和$email也会被赋值为null,isset不会返回false,同时你只在两个参数同时存在的情况下才执行查询,没有处理单参数搜索、无参数搜索的场景,容易出现变量未定义的报错。
  • 视图传参错误:查询结果存储在$fouilles变量中,但你compact传入的是不存在的$souscription变量,同时嵌套使用compact()属于语法错误,compact直接接收变量名字符串作为参数即可,不需要嵌套。
正确实现代码
public function search(Request $request)
{
    // 从请求中获取搜索参数,未传参则默认是空字符串
    $telephone = $request->get('q', '');
    $email = $request->get('q1', '');

    // 初始化查询构造器
    $query = Souscription::query();

    // 手机号不为空时追加手机号模糊查询条件
    if (!empty($telephone)) {
        $query->where('telephone', 'LIKE', "%{$telephone}%");
    }

    // 邮箱不为空时追加邮箱模糊查询条件
    if (!empty($email)) {
        $query->where('email', 'LIKE', "%{$email}%");
    }

    // 执行查询获取结果
    $fouilles = $query->get();

    // 将需要的变量传递到视图
    return view('rechercher', compact('fouilles', 'telephone', 'email'));
}
可选逻辑调整说明

如果需要实现「手机号匹配搜索词 或 邮箱匹配搜索词」的逻辑,把第二个where改成orWhere即可;如果需要无搜索参数时返回空列表,可在两个参数都为空的场景下直接给$fouilles赋值空集合collect()。


内容的提问来源于stack exchange,提问作者Cedric Djiré

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:24:03