猿问

更新和删除——我无法在 Laravel 框架中更新和删除数据库中的数据

我正在使用表单提交更新和从数据库中删除我的数据的请求,但我无法这样做。


我尝试过使用不同的方法,但我无法解决这个问题。我在这个项目中使用 Laravel 5.4.36。


控制器:


public function update(Request $request, $id)

{

    Student::where('id', $id)->update(['first_name' => 'vks', 'last_name' => 'pok']);

}


public function destroy(Request $id)

{

    $student=Student::find($id);

    $student->delete();

}

路线:


Route::get('/student/about', 'BksController@about');

Route::get('/student/service', 'BksController@Services');

Route::get('create','BksController@create');

Route::post('create','StudentController@create');

Route::get('search','BksController@search');

Route::post('search','StudentController@show');

Route::get('/update','BksController@update');

Route::put('update','StudentController@update');

Route::get('/delete','BksController@delete');

Route::delete('/delete','StudentController@destroy');

Route::resource('student', 'StudentController');

Route::get('/home', 'HomeController@index')->name('home');

销毁形式的刀片模板:


@include('student.commonlayout')


<div class='col-md-6 col-md-offset-3'>

  <h1>DeleteData</h1>

  <hr>

  <form method="post" action="{{url('delete')}}">

    {{csrf_field()}}

    <div class="form-group">

      <input type="text" name="first_name" class="form-control" placeholder="Enter your Id" />

    </div>

    <div class="form-group">

      <input type="submit" class="btn btn-primary"/>

    </div>

  </form>

</div>

更新表单的 Blade 模板:


@include('student.commonlayout')


<div class='col-md-6 col-md-offset-3'>

  <h1>update Data</h1>

  <hr>

  <form method="post" action="{{url('update')}}">

    {{csrf_field()}}

    <div class="form-group">

      <input type="text" name="id" class="form-control" placeholder="Enter your id" />

    </div>


更新时,我收到以下错误:


RouteCollection.php 第 251 行中的 MethodNotAllowedHttpException


删除时,我收到类似的错误:


RouteCollection.php 第 251 行中的 MethodNotAllowedHttpException


慕尼黑5688855
浏览 155回答 2
2回答

米琪卡哇伊

我在您的任何删除或更新路由中都没有看到 POST 方法。&nbsp; Route::get('/update','BksController@update');&nbsp; Route::put('update','StudentController@update');&nbsp; Route::get('/delete','BksController@delete');&nbsp; Route::delete('/delete','StudentController@destroy');当您单击表单中的按钮时,它会执行 HTTP 发布。因此,将您的路线更改为相应Route:post(...)地匹配。

一只萌萌小番薯

使用Route::resource(...)将创建HTTP请求方法途径DELETE的destroy行动,并PUT为update行动。这意味着您在提交表单时必须使用这些方法。不幸的是,HTML 表单不支持PUT或DELETE。这就是为什么 Laravel 使用一个名为的特殊隐藏输入_method,它应该包含正确的方法。表单本身应该通过POST. 这就是您的更新表单的样子(省略字段和其他标记):<form method="post" action="{{ url('update') }}">&nbsp; @method('put')&nbsp; {{ csrf_field() }}&nbsp; <!-- Your fields here --></form>该指令@method('put')将生成以下 html <input type="hidden" name="_method" value="put">。您可以在官方文档中阅读有关此主题的更多信息。
随时随地看视频慕课网APP
我要回答