Laravel 5.1从数据库中删除一行

时间:2015-07-23 12:20:29

标签: php laravel-5 laravel-routing

我正在尝试通过点击按钮

来删除某个类别

刀片:

<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

任何帮助表示感谢。

3 个答案:

答案 0 :(得分:7)

::find($id)方法希望$id为数字,即您要查找的行的主键。

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

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

答案 1 :(得分:0)

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

<块引用>

::find($name) 返回一个空对象或 null

这是因为搜索为空。

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

否则:

<块引用>

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

或:

<块引用>

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

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

其次,使用destroy并不是很重要。推荐但不是必须的!

答案 2 :(得分:-1)

在您看来: 它必须是一个提交 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名字格式的作用: enter image description here