Laravel 9 报错:Attempt to assign property 'category_id' on null 问题咨询
问题分析与修复方案
核心问题
当category_id数值大于等于100000时抛出「Attempt to assign property 'category_id' on null」错误,本质是查询数据库时未找到对应记录,返回了null,后续对null对象赋值属性导致报错。
原因排查
- 参数使用错误:控制器方法定义了路由参数
$category_id,但实际查询时却用了$request->category_id。从视图代码看,form的action是把category_id放在路由路径中({{url('edit-attributes')}}/{{ $category_logs->category_id }}),并未通过请求参数传递该值,导致大ID场景下$request->category_id无有效值,TicketsLog::find()返回null。 - 额外验证点:确认数据库
category_id字段类型,虽然684356未超出MySQL int类型最大值(2147483647),但如果字段设置了长度限制或其他约束,也可能导致查询失败。
修复代码
控制器代码修正
public function editAttributes(Request $request, $category_id){ Session::put('page','tickets-log'); // 改用路由参数$category_id查询,而非request参数 $category_logs = TicketsLog::find($category_id); // 增加空判断,提前拦截不存在的记录 if(!$category_logs){ abort(404, '分类记录不存在'); } // 仅更新需要修改的字段,无需重复赋值主键category_id $category_logs->category_name = $request->category_name; $category_logs->category_desc = $request->category_desc; $category_logs->category_not = $request->category_not ; $category_logs->category_not2 = $request->category_not2; $category_logs->category_not3 = $request->category_not3; $category_logs->category_not4 = $request->category_not4; $category_logs->save(); return view('attributes.edit', compact('category_logs')); }
视图代码优化(可选)
使用路由命名替代硬编码URL,更易维护:
<form enctype="multipart/form-data" action="{{ route('edit.attributes', $category_logs->category_id) }}" method="post">@csrf <div class="col-sm-6"> <div class="card"> <div class="card-body"> <h5 class="card-title">Category :</h5> <input type="number" class="form-control" id="category_id" value="{{ $category_logs->category_id }}" readonly> </div> </div> </div> </form>
需在routes/web.php中给路由命名:
Route::post('/edit-attributes/{category_id}', [YourController::class, 'editAttributes'])->name('edit.attributes');
内容的提问来源于stack exchange,提问作者Marco
相关产品推荐
相关产品推荐

