Laravel CRUD开发异常:点击第三条数据却删除第一条数据求助
问题原因
循环渲染数据行时,所有删除模态框的ID都是exampleModal,浏览器只会匹配第一个拥有该ID的元素。因此无论点击哪条数据的删除按钮,弹出的都是第一条数据对应的模态框,最终删除的是第一条数据的ID。
解决方案
1. 修改前端代码:给每个模态框设置唯一ID
将模态框的ID和按钮的data-bs-target绑定当前数据的id_pegawai,确保每个模态框唯一。同时建议用表单提交删除请求(符合REST规范,避免GET请求的误触风险):
<!-- 删除按钮 --> <button type="button" class="btn btn-danger" data-bs-toggle="modal" data-bs-target="#deleteModal-{{$row->id_pegawai}}"> Hapus </button> <!-- 唯一ID的模态框 --> <div class="modal fade" id="deleteModal-{{$row->id_pegawai}}" tabindex="-1" aria-labelledby="deleteModalLabel-{{$row->id_pegawai}}" aria-hidden="true"> <div class="modal-dialog"> <div class="modal-content"> <div class="modal-header"> <h5 class="modal-title" id="deleteModalLabel-{{$row->id_pegawai}}">Apakah anda yakin ingin menghapus data?</h5> <button type="button" class="btn-close" data-bs-dismiss="modal" aria-label="Close"></button> </div> <div class="modal-footer"> <button type="button" class="btn btn-secondary" data-bs-dismiss="modal">Tutup</button> <!-- 使用表单提交DELETE请求 --> <form action="/deletedata/{{$row->id_pegawai}}" method="POST"> @csrf @method('DELETE') <button type="submit" class="btn btn-primary">Ya</button> </form> </div> </div> </div> </div>
2. 修改控制器代码(优化版)
用firstOrFail简化逻辑,找不到对应数据时自动返回404:
public function deletedata($id_pegawai){ $employee = Employee::where('id_pegawai', $id_pegawai)->firstOrFail(); $employee->delete(); return redirect('pegawai')->with('success', 'Data berhasil dihapus!'); }
3. 调整路由配置
确保路由使用DELETE方法(在routes/web.php中):
use App\Http\Controllers\YourEmployeeController; // 替换为你的控制器类名 Route::delete('/deletedata/{id_pegawai}', [YourEmployeeController::class, 'deletedata'])->name('pegawai.delete');
这样修改后,每个删除按钮会对应到当前数据行的模态框,提交的删除请求也会携带正确的ID,就能精准删除目标数据了。
内容的提问来源于stack exchange,提问作者ZAlIce
相关产品推荐
相关产品推荐

