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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 19:35:23