2016-04-07 85 views
1

我是Laravel新Laravel 5.2,我从here以下CRUD教程。CRUD Laravel 5.2,功能应该删除,但它给我添加

一切都还好,但我被困在删除功能。

{!! Form::model($book, ['_method' => 'DELETE', 'action' => ['[email protected]', $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\[email protected]  | web  | 
|  | POST  | books    | books.store | App\Http\Controllers\[email protected]  | web  | 
|  | GET|HEAD | books/create  | books.create | App\Http\Controllers\[email protected]  | web  | 
|  | DELETE | books/{books}  | books.destroy | App\Http\Controllers\[email protected]  | web  | 
|  | PUT|PATCH | books/{books}  | books.update | App\Http\Controllers\[email protected]  | web  | 
|  | GET|HEAD | books/{books}  | books.show | App\Http\Controllers\[email protected]  | web  | 
|  | GET|HEAD | books/{books}/edit | books.edit | App\Http\Controllers\[email protected]  | web  | 
|  | DELETE | books/{id}   | books.destroy | App\Http\Controllers\[email protected]  | web  | 
|  | GET|HEAD | user    |    | App\Http\Controllers\[email protected] | web  | 
+--------+-----------+--------------------+---------------+-------------------------------------------------+------------+ 

有没有错误,但功能是不正确的。他们应该被删除的书,但他们不是。他们将空行添加到MySQL。

编辑: 如果您收到与我相同的错误: 1.检查id是否与您的主键相同。 2.确保编码中列出的ID与数据库相同。 3.然后,检查下面为我工作的答案,谢谢很多家伙!

+0

对不起,我的语法错误。我之前已经向我的当地朋友问过这个问题,但是他们中没有一个能解决这个问题(或者我只是为了小菜一碟)。 –

+0

你的链接教程似乎使用'method => ...'而不是'_method => ...'是一个错字? – apokryfos

+0

当我使用该方法时,它出现错误'MethodNotAllowedHttpException',我搜索它,因为删除方法是不允许的,所以我用_method来操作它。这是有效的,但不是功能。 –

回答

1

你的代码看起来不错。

我可以在数据库中看到您的表吗?也许你使用另一个名字在表中创建主键。如果这是真的,那么您必须将此代码添加到您的书籍模型的顶部。

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

希望它能起作用。

0

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

另外你的_method属性无效,应该命名为method

改变这一行{!! Form::model($book, ['_method' => 'DELETE', 'action' => ['[email protected]', $book->id]]) !!}

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

+0

感谢您的回复。每当我使用方法时,它都会出错:'MethodNotAllowedHttpException' –

+0

你可以在这里附加你的视图吗? –

+0

我认为codehare.io会更好。这里我们是:[链接](https://codeshare.io/LZzEq) –

0

这应该工作:

​​

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

另外,最好使用路由以实现更好的可维护性。

更新

尝试使用您的控制器Book::destroy($id)而不是delete()

+0

它出现错误:'MethodNotAllowedHttpException'每当我使用'方法' –

+0

感谢您的回应无论如何嘿嘿 –

+0

检查你的表。也许你已经删除了书本,现在'$ books'是空的,当你试图在你的视图中加入'$ books'时,你会看到一个错误。 –

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() !!} 

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

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

请务必包括use Illuminate\Support\Facades\Redirect;在您的控制器。

+1

是的,我将在我的控制器中列出'使用Illuminate \ Support \ Facades \ Redirect;'。不管怎么说,还是要谢谢你! –