Laravel实现部门用户二级联动时where查询条件不生效问题
问题排查与修复方案
核心问题点
- 控制器参数接收不匹配:前端AJAX请求传递的参数名为
department_id,但控制器findUsersName方法中错误使用$request->id取值,导致where条件永远无法匹配。 - 路由与请求地址需对应:前端AJAX请求地址为
findProductName,需要确保路由配置正确绑定到对应的控制器方法。 - 员工下拉框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
相关产品推荐
相关产品推荐

