Laravel博客模块插入数据报错:Attempt to read property "blog_category_id" on null
Laravel博客模块插入文章报错排查
我正在Laravel中开发博客模块,已创建分类表并成功插入数据,blog_categories表中存在数据,能在创建文章的表单中获取所有分类,但插入文章数据时出现错误Attempt to read property "blog_category_id" on null,以下是我的代码,请帮忙排查问题。
Model代码
class Blog extends Model { use HasFactory; protected $guarded = []; public function category(){ return $this->belongsTo(BlogCategory::class,'blog_category_id','id'); } }
Controller代码
public function storeBlog(Request $request){ $request->validate([ 'blog_category_id' =>'required', 'photo' => 'required|image|mimes:jpg,jpeg,png', 'title'=>'required', 'details'=>'required', ]); $ext = $request->file('photo')->extension(); $final_name = time().'.'.$ext; $request->file('photo')->move(public_path('uploads/'),$final_name); $obj = new Blog(); $obj->$request->blog_category_id; $obj->title =$request->title; $obj->details = $request->details; $obj->photo = $final_name; $obj->visibility = 0; $obj->created_by= null; $obj->save(); dd($obj); return redirect()->back()->with('message','Blog Post created successfully'); }
表单代码
<h3>Select Post Category</h3> <div class="mt-5"> <div class="custom-select"> <select name="blog_category_id" class="form-control"> <option selected="">Select Post Category</option> @foreach($categories as $item) <option value="{{$item->id}}">{{$item->blog_category}}</option> @endforeach </select> <div class="custom-select-icon la la-caret-down"></div> </div> </div>
问题排查与修复
报错的核心原因是Controller中的赋值语句语法错误:
$obj->$request->blog_category_id;
这行代码会被解析为尝试访问$obj的$request属性(该属性不存在,返回null),接着尝试读取null的blog_category_id属性,从而触发报错。
正确的赋值方式是将请求中的blog_category_id值赋给Blog模型的对应属性,修改为:
$obj->blog_category_id = $request->blog_category_id;
另外,表单中的默认选项可以调整得更严谨(虽不影响当前验证,但符合规范):
<option value="" selected>Select Post Category</option>
修改后重新测试,文章插入逻辑即可正常运行。
内容的提问来源于stack exchange,提问作者mchomvu
相关产品推荐
相关产品推荐

