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

Php 使用Laravel 5.4从数据库中删除数据,php,laravel,laravel-5,laravel-5.4,Php,Laravel,Laravel 5,Laravel 5.4,我对Laravel框架有点陌生,我只是在建立一个简单的博客。我可以创建博客、显示博客和显示所有博客的概述。现在我想删除一个博客。因此,我在视图中创建了一个删除按钮,其中包含一个路由链接,该链接还将传递文章的id。然后,在我的路由文件中,我指定了一个删除请求和一个控制器方法。在该方法中,我找到id并尝试删除具有我在route/view中指定的id的行 这不管用。它不激活destroy/delete方法,而是显示文章而不是删除它,并激活show方法而不是delete方法。谁能帮帮我,我做错了什么 V

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

这不管用。它不激活destroy/delete方法,而是显示文章而不是删除它,并激活show方法而不是delete方法。谁能帮帮我,我做错了什么

View.blade.php

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

删除/销毁

public function destroy($id) {

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

    $blog->delete();

    return redirect('/nieuws');

}
展示


我认为您需要更新销毁功能,如:

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>


希望这项工作为你

我对Laravel也很陌生,但我是通过以下方式实现的: (我使用'Article'作为模型的名称,route中的
资源
“method”表示一系列有用的路由,包括您编写的路由)

控制器:

public function destroy($id){
        Article::find($id)->delete();
        //$article = Article::find($id);
        return redirect()->back()->withErrors('Successfully deleted!');
    }
路线:

Route::resource('article','ArticleController');
然而,我认为问题在于模型的数据库名称的默认定义。Laravel将假定您有一个名为blogs的数据库,因为您有一个名为“blog”的模型。数据库的名称正确吗?

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

HTML表单只支持GET和POST,其他方法如DELETE、PUT等不受支持,这就是Laravel使用
\u方法
欺骗HTML表单不支持的方法的原因

在这些情况下,您不想使用GET,因为有人可以通过IM或电子邮件向用户发送url()。用户点击,博客就消失了

按照使用资源控制器时的方式定义路由,以便:

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>

要使用
DELETE
HTTP动词,表单应包括
POST
方法和
method\u字段(“DELETE”)设置。

例如:

<form method="POST" action="{{ route('xxx.destroy', $xxx->id) }}">
    {{ csrf_field }}
    {{ method_field('DELETE') }}
</form>

{{csrf_field}}
{{method_field('DELETE')}

不幸的是,我想这不是问题所在。问题是我的控制器显示的是
@show
方法,而不是
@destroy
method@Gijsbertsblog in show方法的结果是什么?只需使用数据库中的数据显示blog的详细信息。出于测试目的,我现在使用datadump函数查看它是否激活show方法。是。这不是问题,因为我还可以添加博客并显示它们。问题是销毁路由与显示路由冲突。它没有激活destroy方法,而是激活show方法。将视图更改为:
{{method\u field('DELETE')}{{csrf\u field()}删除
@Gijsberts您可能需要重新检查kunal的答案。允许GET请求以任何方式更改数据都是不好的做法,而且存在安全风险。
// 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>
public function destroy($id)
{
    $blog = Blog::findOrFail($id);

    $blog->delete();

    return redirect('/nieuws');
}
<form method="POST" action="{{ route('xxx.destroy', $xxx->id) }}">
    {{ csrf_field }}
    {{ method_field('DELETE') }}
</form>