Laravel框架下路由传递的jobseekerExamReview模型参数读取为空问题
问题排查与解决方法
根因定位
问题核心为Laravel隐式模型绑定参数名不匹配:路由定义的参数名和控制器方法接收的参数名不一致,导致Laravel无法自动查询对应数据库记录,只会返回空的jobseekerExamReview模型实例,因此所有字段均为null。
排查步骤
- 先校验路由与控制器参数名匹配性:你的路由中占位符为
{jobseekerExamReview:id},但showResults方法的入参是$examReview,二者名称不统一,是隐式绑定失效的最常见原因 - 临时验证手动查询是否正常:把
showResults的入参改为$id,手动执行查询dd(jobseekerExamReview::findOrFail($id)),如果能正常返回数据,即可100%确认是参数名匹配问题 - 顺带检查模型可填充配置:确认
jobseekerExamReview模型的$fillable数组中包含jobseeker_id、exam_id、result字段,避免创建/更新时字段被过滤(你已确认数据库有对应记录,此问题概率较低)
具体解决方法
方法1:统一参数名(推荐)
将showResults方法的入参名改为和路由占位符一致即可,修改后代码如下:
// 修改前 // public function showResults(jobseekerExamReview $examReview) // 修改后 public function showResults(jobseekerExamReview $jobseekerExamReview) { return view('exams.exam-review-results',[ 'examReview' => $jobseekerExamReview ])->with('reviewExamAnswers'); }
方法2:显式指定参数key
如果不想修改控制器参数名,也可以调整路由和重定向代码,显式指定参数对应关系:
首先修改路由占位符:
Route::get('/exam/reviewExam/results/{examReview:id}', [reviewExamController::class, 'showResults']) ->middleware(['auth','verified']) ->name('showResults');
重定向时显式传参:
return redirect()->route('showResults', ['examReview' => $examReview]);
额外优化
你当前代码中with('reviewExamAnswers')没有传递对应值,视图调用该变量会报错,建议调整为:
// 先查询对应答题记录 $reviewExamAnswers = jobseekerExamReviewAnswer::where('exam_review_id', $jobseekerExamReview->id)->get(); return view('exams.exam-review-results',[ 'examReview' => $jobseekerExamReview, 'reviewExamAnswers' => $reviewExamAnswers ]);
内容的提问来源于stack exchange,提问作者ellajhonm
相关产品推荐
相关产品推荐

