Laravel 5.1 从数据库中删除一行

Laravel 5.1 Delete a row from database

我正在尝试通过单击按钮来删除类别

Blade:

<td class="center"><a href="{{URL::to('/deletecat/'.$category->name) }}"><span class="glyphicon glyphicon-trash"></span></a></td>

路线:

Route::get('/deletecat/{name}','CategoryController@delete');

控制器:

 public function delete($name)
    {

        category::find($name)->delete();

        return Redirect::route('managecategory');

    }

但是我在点击

按钮时出现错误
Call to a member function delete() on a non-object

感谢任何帮助。

::find($id) 方法要求 $id 是一个数字,即您要查找的行的主键。

如果要按名称删除行,应使用以下代码:

category::where('name', $name)->delete();

在您看来: 它必须是提交 POST 请求的表单,如下所示:

    <form  action="/deletecat/{{$data->id}}" method="post">
            @csrf
            @method('DELETE')
        <input type="submit" value="delete " >
    </form>

因为这是 POST 请求必须使用 csrf 和删除操作。

在你的路线中,它有 delete() 方法,然后是控制器。

Route::delete('/deletecat/{name}', 'CategoryController@destory');

在控制器中:

 public function destory($name)
{

    category::find($name)->delete();

    return Redirect::route('managecategory');

}

这就是laravel名字格式的作用:

错误显然是因为返回的 NON-OBJECT。

::find($name) returns an empty object or null

这是因为搜索为空。

确保名称是主键以便使用查找。

否则:

use ::where('name', $name)->delete();

或:

::where('name','=', $name)->delete();

*我指出 = 因为如果您需要搜索不同于 = 的内容,请使用 >= <> 等等...

其次,使用destroy也不是很重要。推荐但非必备!