CRUD Laravel 5.2,该功能应该删除,但它给我添加

时间:2016-04-07 07:46:14

标签: php function laravel routing laravel-5.2

我是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.看看下面为我工作的答案,非常感谢!

4 个答案:

答案 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;