错误:从空值(laravel)创建默认对象

错误:从空值(laravel)创建默认对象,laravel,Laravel,所以我只想简单地用Laravel更新crud 这就是错误: 这是我的控制器: public function update(Request $request, $id) { $request->validate([ 'category_fam'=>'required', 'student_name'=>'required', 'parent_name'=>'required', 'grade'=

所以我只想简单地用Laravel更新crud

这就是错误:

这是我的控制器:

 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);