我是Laravel的新手,特别是Laravel 5.2,我从here开始关注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 artisan route:list
这是列出的名称(我认为名称是主要问题):
+--------+-----------+--------------------+---------------+-------------------------------------------------+------------+
| 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。
EDITED:
如果你和我有同样的错误:
1.检查id
是否与主键相同。
2.确保您在编码中列出的ID与数据库相同。
3.看看下面为我工作的答案,非常感谢!
答案 0 :(得分:1)
您的代码看起来很好。
我能在数据库中看到你的表吗?也许您正在使用其他名称在表格中创建主键。如果确实如此,那么您必须在图书模型的顶部添加此代码。
protected $primaryKey = 'your-column-name';
希望它能奏效。
答案 1 :(得分:0)
代码中的所有内容都很好,只需要更改表单的action
即可。您已将控制器注册为资源,因此可以通过路由名称访问它。
此外,您的_method
属性无效,应将其命名为method
。
更改此行{!! Form::model($book, ['_method' => 'DELETE', 'action' => ['BookController@destroy', $book->id]]) !!}
收件人:{!! Form::model($book, ['method' => 'DELETE', 'route' => ['books.destroy', $book->id]]) !!}
答案 2 :(得分:0)
这应该有效:
{!! 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()
。
答案 3 :(得分:0)
我注意到你正在使用资源控制器,你可以试试这个
{!! Form::open(array('url' => '/books/destroy' , 'method' => 'delete')) !!}
{!! Form::hidden('id', $book->id) !!}
<button type="submit" class="btn btn-default">Delete</button>
{!! Form::close() !!}
在您的Controller中添加以下代码块
public function destroy($id) {
$book= Book::find($id);
$book->delete();
return "deleted";
return Redirect::to('/books');
}
确保在控制器中包含use Illuminate\Support\Facades\Redirect;
。