使用 Laravel 5.4 从数据库中删除数据

新手上路,请多包涵

我是 Laravel 框架的新手,我正在构建一个简单的博客。我可以创建一个博客,显示一个博客并显示所有博客的概览。现在我想删除一个博客。因此,我在我的视图中创建了一个删除按钮,其中包含一个路由链接,该链接还将传递文章的 ID。然后,在我的路由文件中我指定了一个删除请求和一个控制器方法。在方法中,我找到了 id 并尝试删除具有我在路由/视图中指定的 id 的行。

这是行不通的。它不是激活 destroy/delete 方法,而是显示文章而不是删除它,并激活 show 方法而不是 delete 方法。有人可以帮帮我吗,我做错了什么?

查看.blade.php

 <a href="{{route('nieuws.destroy', ['id' => $blog->id])}}" onclick="return confirm('Weet je dit zeker?')">
  <i class="fa fa-trash"></i>
</a>

路线

Route::group(['middleware' => 'auth'], function () {

    Route::get('/aanvragen', 'aanvragenController@index')->name('aanvragen.index');

    Route::get('/logout' , 'Auth\LoginController@logout')->name('logout');

    Route::get('/nieuws/toevoegen', 'blogController@create')->name('blogs.add');

    Route::post('/nieuws/store', 'blogController@store')->name('nieuws.store');

    Route::delete('/nieuws/{id}', 'blogController@destroy')->name('nieuws.destroy');

});

Route::get('/nieuws', 'blogController@index')->name('blogs.index');

Route::get('/nieuws/{blog}', 'blogController@show')->name('blogs.show');

控制器方法

删除/销毁

public function destroy($id) {

    $blog = Blog::find($id);

    $blog->delete();

    return redirect('/nieuws');

}

展示

public function show(Blog $blog) {

    dd('show');

    return view('blogs.show', compact('blog'));

}

原文由 Giesburts 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 517
2 个回答

delete() 路由要求您发布数据。

HTML 表单仅支持 GET 和 POST,不支持其他方法,如 DELETE、PUT 等,这就是为什么 Laravel 使用 _method 来欺骗 HTML 表单不支持的方法。

在这些情况下您 希望使用 GET,因为有人可以通过 IM 或电子邮件向用户发送 url ( http://yoursite.com/blog/delete/1 )。用户点击,博客就消失了。

像使用资源控制器时那样定义您的路线,因此:

 Route::delete('/nieuws/{id}', 'blogController@destroy')->name('nieuws.destroy');

并使用带有 delete 方法的表单:

 // apply some inline form styles
<form method="POST" action="{{ route('nieuws.destroy', [$blog->id]) }}">
    {{ csrf_field() }}
    {{ method_field('DELETE') }}
    <button type="submit">Delete</button>
</form>

或者像 SR_ 在他对您的 OP 的评论中发布的链接那样做一些 javascript 魔术。


还有一件事,在您的销毁操作中添加某种验证。现在当你提供一个不存在的 id 或其他东西时,你会得到一个 500 错误,而不是你想要一个 404。

 public function destroy($id)
{
    $blog = Blog::findOrFail($id);

    $blog->delete();

    return redirect('/nieuws');
}

原文由 Robert 发布,翻译遵循 CC BY-SA 3.0 许可协议

我认为你需要像这样更新你的 destroy 函数:

 public function destroy($id) {

    $blog = DB::table('blog')->where('id',$id)->delete();

    return redirect('/nieuws');

}

并更新您的视图代码,例如:

 <a href="{{route('nieuws.destroy', [$blog->id])}}" onclick="return confirm('Weet je dit zeker?')">
  <i class="fa fa-trash"></i>
</a>

希望这对你有用!

原文由 AddWeb Solution Pvt Ltd 发布,翻译遵循 CC BY-SA 3.0 许可协议

推荐问题
logo
Stack Overflow 翻译
子站问答
访问
宣传栏