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

Laravel 8多表单字段搜索时request('name')为null的问题修复

问题分析与解决方案

1. 表单字段name属性错误(核心问题)

你的表单存在多处name属性与字段含义不匹配、甚至重复的问题,这会导致请求参数解析混乱,是引发request('name')返回null的关键原因:

  • 手机号字段(对应mnumber)的name被错误设置为order
  • 用户编码字段(对应ucode)的name被错误设置为product
  • 身份证号字段(对应ncode)的name被错误设置为order(与手机号字段重复)

修复后的表单代码:

<form method="GET" action="">
    <div>
        <div class="form-group">
            <div class="row">
                <div class="col-md-3">
                    <label for="name">Name or Last Name</label>
                    <input type="text" class="form-control" name="name" 
                                                value="{{ request()->query('name') }}">
                </div>
                <div class="col-md-3">
                    <label for="mnumber">Mobile Number</label>
                    <input type="text" class="form-control" name="mnumber"
                                               value="{{ request()->query('mnumber') }}">
                </div>
                <div class="col-md-3">
                    <label for="ucode">User Code</label>
                    <input type="text" class="form-control" name="ucode"
                                                value="{{ request()->query('ucode') }}">
                </div>
                <div class="col-md-3">
                    <label for="ncode">National Number</label>
                    <input type="text" class="form-control" name="ncode"
                                                value="{{ request()->query('ncode') }}">
                </div>
            </div>
        </div>
   </div>
</form>

2. 控制器搜索条件判断逻辑优化

原代码中if($keyword = request('name'))的判断会将空字符串视为false,导致存在空参数时跳过搜索逻辑。Laravel提供的filled()方法可以准确判断参数是否存在且不为空字符串,建议替换为该方法:

修复后的控制器代码:

public function index()
{
    $users = User::query();

    if(request()->filled('name')) {
        $keyword = trim(request('name'));
        $users->where('name', 'LIKE', "%{$keyword}%");
    }

    // 可按需添加其他字段的搜索逻辑
    if(request()->filled('mnumber')) {
        $users->where('mobile_number', 'LIKE', "%".trim(request('mnumber'))."%");
    }

    if(request()->filled('ucode')) {
        $users->where('user_code', 'LIKE', "%".trim(request('ucode'))."%");
    }

    if(request()->filled('ncode')) {
        $users->where('national_number', 'LIKE', "%".trim(request('ncode'))."%");
    }

    $users = $users->latest()->paginate(20);

    return view('admin.users.all', compact('users'));
}

额外优化建议

  • 使用trim()处理输入关键词,避免空格导致的搜索不准确
  • 如果需要同时匹配姓名和姓氏,可扩展搜索范围:
    $users->where('name', 'LIKE', "%{$keyword}%")
          ->orWhere('last_name', 'LIKE', "%{$keyword}%");
    

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.25 19:15:58