Laravel5.6“;对null";调用成员函数delete(),删除表中的一行

Laravel5.6“;对null";调用成员函数delete(),删除表中的一行,laravel,eloquent,laravel-5.6,laravel-controller,Laravel,Eloquent,Laravel 5.6,Laravel Controller,我想从表中删除一行。我在控制器中使用的功能是: public function destroy($id) { $category = Category::find($id); $category->delete(); return redirect()->back(); } 然而,这给我带来了一个错误: 在null上调用成员函数delete() 当我使用此代码时: public function destroy($id) { $category =

我想从表中删除一行。我在控制器中使用的功能是:

public function destroy($id) {
    $category = Category::find($id);
    $category->delete();
    return redirect()->back();
} 
然而,这给我带来了一个错误:

在null上调用成员函数delete()

当我使用此代码时:

public function destroy($id) {
    $category = Category::find($id);
    dd($id);
 } 
它显示的是正确的id,即

“1”

当我使用

public function destroy($id) {
    $category = Category::find($id);
    dd($category); // or
    dd(Category::find($id);
 } 
我得到输出

空的


在屏幕上。

如注释中所述,您收到的错误可能是由于给定ID的数据库中不存在类别

然后,当您尝试查找该ID的类别时:

$category = Category::find($id);
$category
变量的值为
null
。因此,尝试调用
null
上的
delete()
方法时会出现错误。在发动机罩下,这与执行以下操作相同:

null->delete();
这是行不通的

您可以在尝试删除之前检查
$category
的值。或者,您可以使用查询删除与给定条件匹配的所有记录,在您的情况下为
id=$id
。这样:

public function destroy($id)
{
    Category::where('id', $id)->delete();
    return redirect('/')->back();
}

有关如何工作的详细信息,请参阅中的通过查询删除模型。

对我有效的方法如下(我确保$id从视图中传递):

由于某种原因,当我执行以下操作时,它显示为空

这是视图部分:

     {!! Form::open(array(
         'style' => 'display: inline-block;',
         'method' => 'DELETE',
         'onsubmit' => "return confirm('".trans("global.app_are_you_sure")."');",
         'route' => ['vendor.destroy', $vendor->vendor_id])) !!}
     {!! Form::submit(trans('global.app_delete'), array('class' => 'btn btn-xs btn-danger')) !!}
     {!! Form::close() !!}

该类别可能不存在我有类别模型,还包括使用App\category;检查数据库id 1是否存在于数据库中?可能与thaks重复使用此类别::where('id',$id)->delete();而不是$category=category::find($id)$类别->删除();你能解释一下我的问题吗getting@AsharKhan我刚刚更新了塞巴斯蒂安的答案,包括发生了什么以及为什么会出现错误的细节。我认为这只是隐藏了问题,并不能解决问题。真正的问题是为什么Category::find($id)找不到您的模型。$id错误,模型不存在,或者您的模型类被设置为使用错误的主键。在任何一种情况下,您的代码都不应继续。@Devon这取决于OP希望如何处理该问题。我见过一些简单地忽略不存在的实体并继续流动的应用程序。但是,是的,我个人会使用
findOrFail()
调用或另一种处理方式,通知应用程序的用户他们试图删除的记录不存在。
public function destroy($id)
{
    $vendor = Vendor::find($id);
    $vendor->delete():
}
     {!! Form::open(array(
         'style' => 'display: inline-block;',
         'method' => 'DELETE',
         'onsubmit' => "return confirm('".trans("global.app_are_you_sure")."');",
         'route' => ['vendor.destroy', $vendor->vendor_id])) !!}
     {!! Form::submit(trans('global.app_delete'), array('class' => 'btn btn-xs btn-danger')) !!}
     {!! Form::close() !!}