Laravel项目报错求助:空对象读取bujet属性及请求方法不支持
问题解决方案
1. 解决“Attempt to read property 'bujet' on null”错误
这个错误是因为查询bajet表时,找不到匹配kriyakalap值的记录,导致$getBudgetVal为null,后续访问$getBudgetVal->bujet触发空指针异常。修改控制器中更新预算的代码,增加空值判断,或自动创建不存在的预算记录:
修改后的控制器代码片段:
//Adding Biniyojan balance in Budgets table $getBudgetVal = bajet::where(['kriyakalap' => $biniyojan_details->kriyakalap])->first(); if ($getBudgetVal) { $newBudget = $getBudgetVal->bujet + $biniyojan_details->cash; bajet::where('kriyakalap',$biniyojan_details->kriyakalap)->update(['bujet'=>$newBudget]); } else { // 若未找到对应记录,创建新的预算条目 $newBajet = new bajet(); $newBajet->kriyakalap = $biniyojan_details->kriyakalap; $newBajet->bujet = $biniyojan_details->cash; // 补充其他必填字段(如果表结构有要求) $newBajet->save(); } //Adding Biniyojan balance in Budgets table
如果业务要求kriyakalap对应的记录必须预先存在,也可以改用firstOrFail()并配合异常捕获,但上述方式更灵活,能直接规避空指针错误。
2. 解决“The GET method is not supported for this route”错误
直接在地址栏输入URL属于GET请求,但你的路由仅配置了POST方法。需要添加对应的GET路由处理页面访问:
修改后的路由代码:
// 处理POST请求(提交数据) Route::post('/biniyojan-reverse',[BiniyojanController::class,'reverse'])->name('reverse')->middleware(['auth','admin']); // 处理GET请求(显示表单页面) Route::get('/biniyojan-reverse',[BiniyojanController::class,'showReverseForm'])->name('reverse.form')->middleware(['auth','admin']);
然后在控制器中新增showReverseForm方法,用于渲染提交表单的页面:
public function showReverseForm() { // 可根据需求传递学校、项目列表等数据到视图 return view('biniyojan.reverse'); // 替换为你的实际视图路径 }
这样用户直接访问/biniyojan-reverse时会进入GET路由显示表单,提交表单时用POST方法触发reverse逻辑,就不会再出现请求方法不支持的错误。
额外优化建议
- 添加请求验证:在
reverse方法开头对date、school、source等参数做验证,避免无效数据引发异常。 - 使用数据库事务:将插入
Biniyojan、BiniyojanDetails和更新bajet的操作包裹在事务中,确保数据一致性,防止部分操作成功、部分失败的情况。
内容的提问来源于stack exchange,提问作者Rajan Sharma
相关产品推荐
相关产品推荐

