2016-04-07 43 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;'。不管怎麼說,還是要謝謝你! –