错误:从空值(laravel)创建默认对象
所以我只想简单地用Laravel更新crud 这就是错误: 这是我的控制器:错误:从空值(laravel)创建默认对象,laravel,Laravel,所以我只想简单地用Laravel更新crud 这就是错误: 这是我的控制器: public function update(Request $request, $id) { $request->validate([ 'category_fam'=>'required', 'student_name'=>'required', 'parent_name'=>'required', 'grade'=
public function update(Request $request, $id)
{
$request->validate([
'category_fam'=>'required',
'student_name'=>'required',
'parent_name'=>'required',
'grade'=>'required',
'phone'=>'required',
'email'=>'required',
]);
$contact = contact::find($id);
$contact->category_fam = $request->get('category_fam');
$contact->student_name = $request->get('student_name');
$contact->parent_name = $request->get('parent_name');
$contact->grade = $request->get('grade');
$contact->phone = $request->get('phone');
$contact->email = $request->get('email');
$contact->save();
return redirect()->route('contact')->with('success','Contact updated successfully');
}
这是我的观点,上面的错误指向:
<form action="{{ route('contact.edit.update',$contact->id) }}" method="POST">
@csrf
@method('PATCH')
<div class="row">
<div class="col-xs-12 col-sm-12 col-md-12">
<div class="form-group form-box">
<label for="category_fam">Category Family</label>
<div class="radio">
<label><input type="radio" name="category_fam" id="category_fam" value="Student" checked> Student</label>
</div>
<div class="radio">
<label><input type="radio" name="category_fam" id="category_fam" value="Parent"> Parent</label>
</div>
<div class="radio">
<label><input type="radio" name="category_fam" id="category_fam" value="Other"> Other</label>
</div>
</div>
</div>
那么如何解决这个问题呢?其他控制器工作正常,我按照模式进行更新。正如我所知,您没有从请求中获得任何数据。在更新请求之前,您是否尝试过
dd()
您的请求?另外,在你们的表格中,我注意到你们在开场白中使用了“POST”方法,但在下面你们定义了“PATCH”方法。还有一件事,您在尝试保存表单之前是否在表单中输入了任何数据?根据表单,您的路线不正确。在您有PATCH
方法的表单中,因此路由必须是PATCH
。最重要的是,您必须将变量放入路由定义中:
Route::patch('/contact/edit/{id}', 'WC\ContactController@update')->name('contact.edit.update');
您可以做两件事:首先,您可以将路线更新到以下位置: 发帖
Route::post('/contact/edit', 'WC\ContactController@update')->name('contact.edit.update');
修补程序
Route::patch('/contact/edit', 'WC\ContactController@update')->name('contact.edit.update');
或者,您可以在表单中删除此@方法('PATCH')
,它仍然可以在路由中使用post
完成所有这些操作后,检查您是否正在控制器中获取数据:
dd($id) and also dd(contact::find($id));
祝你好运..在我从
$contact = contact::find($id);
to
$contact = contact::find(1);
它工作得很好
谢谢大家我们可以查看您的路线吗,尤其是此路线::contact.edit.update?您没有idi发布我的路线的数据。您可以更新此问题的路线和模型吗?使用浏览器检查元素,检查选项标记是否真的获得了值。您还可以尝试使数据库中的字段类别为空
POST
和PATCH
方法正确。这是拉威尔处理更新的方式。所以当我尝试dd()或print_r()时,它给出了“函数的几个参数”你是这样使用的吗:dd($contact)@RouhollahMazarei从未见过这样使用它。谢谢你的回答。是的,我像dd($contact)那样使用它。我应该在表单操作中使用什么方法?但是我得到了一个错误:“此路由不支持POST方法。支持的方法:GET、HEAD、PUT、PATCH、DELETE。”它在上面,在我的视图下面
$contact = contact::find($id);
to
$contact = contact::find(1);