首页 > 解决方案 > Laravel5.6“在null上调用成员函数delete()”,删除表中的一行

问题描述

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

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);
 } 

我得到输出

无效的

屏幕上。

标签: laraveleloquentlaravel-5.6laravel-controller

解决方案


如评论中所述,您收到的错误可能是由于数据库中不存在给定 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 文档中的通过查询删除模型


推荐阅读