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

Laravel实现部门用户二级联动时where查询条件不生效问题

问题排查与修复方案

核心问题点

  1. 控制器参数接收不匹配:前端AJAX请求传递的参数名为department_id,但控制器findUsersName方法中错误使用$request->id取值,导致where条件永远无法匹配。
  2. 路由与请求地址需对应:前端AJAX请求地址为findProductName,需要确保路由配置正确绑定到对应的控制器方法。
  3. 员工下拉框value值逻辑有误:当前渲染员工选项时value使用的是部门ID,若后续需要获取选中员工ID会存在问题。

修复步骤

1. 修改TestController的findUsersName方法
namespace App\Http\Controllers;

use App\Departments;
use App\Users;
use Illuminate\Http\Request;

class TestController extends Controller
{
    public function prodfunct(){
        $department = Departments::all();
        // 注意控制器返回的视图名为productlist,需确保视图文件名为productlist.blade.php
        return view('productlist', compact('department'));
    }

    public function findUsersName(Request $request){
        // 新增参数校验避免非法请求
        $request->validate([
            'department_id' => 'required|integer'
        ]);
        $data = Users::select('name', 'department_id', 'id')
            // 修正参数获取字段名
            ->where('department_id', $request->department_id)
            ->take(100)
            ->get();
        
        return response()->json($data);
    }
}
2. 配置对应路由(routes/web.php)

添加如下路由规则,确保请求地址与控制器方法绑定:

use App\Http\Controllers\TestController;

Route::get('/prodfunct', [TestController::class, 'prodfunct']);
Route::get('/findProductName', [TestController::class, 'findUsersName']);
3. 可选优化:修正前端员工下拉框取值逻辑

将视图中AJAX成功回调的option渲染代码修改为使用用户ID作为value:

success:function(data){
    op='<option value="0" selected disabled>请选择员工</option>';
    for(var i=0;i<data.length;i++){
        // value从data[i].department_id改为data[i].id,符合下拉框取值常规逻辑
        op+='<option value="'+data[i].id+'">'+data[i].name+'</option>';
    }
    div.find('.name').html(op);
}

内容的提问来源于stack exchange,提问作者Er Vaibhav Vatsa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.17 13:15:06