CRUD Laravel 5.2,函数应该被删除,但它给了我添加


CRUD Laravel 5.2, The function should be delete, but it give me add

我是Laravel的新手,尤其是Laravel5.2,我从这里开始学习CRUD教程。

一切都很好,但我被删除功能卡住了。

 {!! Form::model($book, ['_method' => 'DELETE', 'action' => ['BookController@destroy', $book->id]]) !!}
 {!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
 {!! Form::close() !!}

我用

Route::resource('books','BookController');

这里的控制器:

 public function destroy($id)
{
    $book= Book::find($id)
    ->delete();
    return "deleted";
}

当我运行时

php手工路线:列出

它列出的名字(我认为谁的名字是主要问题):

+--------+-----------+--------------------+---------------+-------------------------------------------------+------------+
| Domain | Method    | URI                | Name          | Action                                          | Middleware |
+--------+-----------+--------------------+---------------+-------------------------------------------------+------------+
|        | GET|HEAD  | /                  |               | Closure                                         | web        |
|        | GET|HEAD  | books              | books.index   | App'Http'Controllers'BookController@index       | web        |
|        | POST      | books              | books.store   | App'Http'Controllers'BookController@store       | web        |
|        | GET|HEAD  | books/create       | books.create  | App'Http'Controllers'BookController@create      | web        |
|        | DELETE    | books/{books}      | books.destroy | App'Http'Controllers'BookController@destroy     | web        |
|        | PUT|PATCH | books/{books}      | books.update  | App'Http'Controllers'BookController@update      | web        |
|        | GET|HEAD  | books/{books}      | books.show    | App'Http'Controllers'BookController@show        | web        |
|        | GET|HEAD  | books/{books}/edit | books.edit    | App'Http'Controllers'BookController@edit        | web        |
|        | DELETE    | books/{id}         | books.destroy | App'Http'Controllers'BookController@destroy     | web        |
|        | GET|HEAD  | user               |               | App'Http'Controllers'UserController@showProfile | web        |
+--------+-----------+--------------------+---------------+-------------------------------------------------+------------+

没有错误,但函数不正确。他们应该删除这本书,但事实并非如此。他们将空白行添加到mysql中。

编辑时间:如果你对我也有同样的错误:1.检查id是否与您的主键相同。2.确保编码中列出的id与数据库相同。3.还有,看看下面为我工作的人的答案,非常感谢!

您的代码看起来不错。

我能在数据库中看到你们的表吗?也许您正在使用另一个名称来创建表中的主键。如果这是真的,那么你必须在你的图书模型的顶部添加这个代码。

protected $primaryKey = 'your-column-name';

希望它能起作用。

代码中的一切都很好,只需要更改表单的action即可。您已将控制器注册为资源,因此可以通过路由名称访问它。

此外,您的_method属性无效,应将其命名为method

更改此行{!! Form::model($book, ['_method' => 'DELETE', 'action' => ['BookController@destroy', $book->id]]) !!}

收件人:{!! Form::model($book, ['method' => 'DELETE', 'route' => ['books.destroy', $book->id]]) !!}

这应该有效:

{!! Form::model ($book, array('method' => 'Delete', 'route' => array('books.destroy', $book->id))) !!}
{!! Form::submit('Delete', ['class' => 'btn btn-danger']) !!}
{!! Form::close() !!}

您应该使用method而不是_method。在输出HTML中,您将得到_method

此外,最好使用路由以获得更好的可维护性。

更新

尝试在控制器中使用Book::destroy($id),而不是delete()

我注意到你正在使用资源控制器,你可以尝试这个

{!! Form::open(array('url' => '/books/destroy' ,  'method' => 'delete')) !!}
        {!! Form::hidden('id', $book->id) !!}
        <button type="submit" class="btn btn-default">Delete</button>
{!! Form::close() !!}

在控制器中添加以下代码块

 public function destroy($id) {
    $book= Book::find($id);
    $book->delete();
    return "deleted";
    return Redirect::to('/books');
}

确保控制器中包含use Illuminate'Support'Facades'Redirect;