Laravel 5.6:如何通过ID按钮删除数据库行?我的环境说明
在Laravel 5.6中通过ID实现数据库行删除操作的步骤
别担心,我会一步步带你搞定这个删除功能——其实你生成的资源控制器已经搭好了基础框架,只需要补全逻辑和视图部分就行:
1. 先确认资源路由已注册
你已经用php artisan make:controller todoController --resource生成了资源控制器,接下来要在routes/web.php里注册对应的资源路由,这样Laravel才能把删除请求映射到正确的方法:
Route::resource('todos', 'todoController');
这条路由会自动生成包括destroy方法在内的所有RESTful路由,其中删除操作对应的是DELETE /todos/{todo}这个请求地址。
2. 完善控制器的destroy方法
打开app/Http/Controllers/todoController.php,找到destroy方法(如果是空的就补全逻辑),这里我们实现根据ID查找记录并删除的核心逻辑:
public function destroy($id) { // 查找对应ID的记录,找不到直接返回404页面 $todo = \App\Todo::findOrFail($id); // 执行删除操作 $todo->delete(); // 删除后跳转到列表页,并带上成功提示 return redirect()->route('todos.index')->with('success', '记录已成功删除'); }
这里假设你的模型是Todo,如果还没生成模型,可以用php artisan make:model Todo快速创建。
3. 在视图中添加删除按钮/表单
因为Laravel默认会阻止GET请求的删除操作(安全考虑),所以我们需要用表单发送DELETE请求。在展示todo列表或详情的视图里,添加这样的删除表单:
<form action="{{ route('todos.destroy', $todo->id) }}" method="POST"> @csrf @method('DELETE') <button type="submit" onclick="return confirm('确定要删除这条记录吗?')" class="btn btn-danger">删除</button> </form>
几个关键点解释:
@csrf:生成CSRF令牌字段,防止跨站请求伪造,这是Laravel强制要求的安全校验@method('DELETE'):因为HTML表单本身不支持DELETE方法,这个指令会生成一个隐藏字段,告诉Laravel把当前POST请求当作DELETE请求处理route('todos.destroy', $todo->id):自动生成对应ID的删除路由地址,$todo是你从数据库获取到的模型实例- 加上
onclick的确认提示,避免用户误删
如果是在列表页批量展示todo,你可以循环渲染每个todo的删除按钮:
@foreach($todos as $todo) <div class="todo-item"> <p>{{ $todo->body }}</p> <!-- 每个todo对应的删除表单 --> <form action="{{ route('todos.destroy', $todo->id) }}" method="POST"> @csrf @method('DELETE') <button type="submit" onclick="return confirm('确定要删除这条记录吗?')" class="btn btn-danger">删除</button> </form> </div> @endforeach
4. 测试功能
现在启动本地服务(php artisan serve),打开对应的页面,点击删除按钮,确认后就能看到记录被从数据库中删除,并且跳转到列表页显示成功提示啦。
内容的提问来源于stack exchange,提问作者security enthusiast
相关产品推荐
相关产品推荐

