Laravel5.6“在null上调用成员函数delete()”,删除表中的一行

时间:2018-04-27 15:11:41

标签: 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 = Category::find($id);
    dd($id);
 } 

显示正确的ID,即

  

“1”

当我使用

public function destroy($id) {
    $category = Category::find($id);
    dd($category); // or
    dd(Category::find($id);
 } 

我得到了输出

  

在屏幕上。

2 个答案:

答案 0 :(得分:1)

如评论中所述,您获得的错误可能是由于数据库中没有针对给定ID的类别。

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

$category = Category::find($id);

$category变量的值为null。因此,您尝试在delete()上调用null方法时出错。在幕后,它将与执行以下操作相同:

null->delete();

哪个,不起作用。

您可以在尝试删除之前检查$category的值。或者,您可以使用查询删除符合给定条件的所有记录,例如id = $id。这样:

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

有关其工作原理的详细信息,请参阅Eloquent docs中的按查询删除模型

答案 1 :(得分:0)

对我有用的是以下(我确保$ id是从视图传递过来的)

public function destroy($id)
{
    $vendor = Vendor::findorFail($id);
    $vendor->delete():
}

由于某些原因,当我执行以下操作时,它显示 null

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() !!}