我是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 | AppHttpControllersBookController@index | web |
| | POST | books | books.store | AppHttpControllersBookController@store | web |
| | GET|HEAD | books/create | books.create | AppHttpControllersBookController@create | web |
| | DELETE | books/{books} | books.destroy | AppHttpControllersBookController@destroy | web |
| | PUT|PATCH | books/{books} | books.update | AppHttpControllersBookController@update | web |
| | GET|HEAD | books/{books} | books.show | AppHttpControllersBookController@show | web |
| | GET|HEAD | books/{books}/edit | books.edit | AppHttpControllersBookController@edit | web |
| | DELETE | books/{id} | books.destroy | AppHttpControllersBookController@destroy | web |
| | GET|HEAD | user | | AppHttpControllersUserController@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 IlluminateSupportFacadesRedirect;
。