Laravel 10点击删除无效果:数据未删除仅刷新页面求助
Laravel删除数据失败问题排查与解决
你的问题出在视图层的表单提交逻辑上——点击删除链接时并没有真正提交删除表单,只是触发确认弹窗后刷新了页面,删除接口根本没被调用,所以数据还留在数据库里。
错误原因
你用了<a>标签且设置了空的href="",点击时浏览器默认行为是跳转到当前页面(空链接等价于刷新)。虽然触发了confirm提示,但完全没触发表单提交,后端的destroy方法根本没执行。
修复方法
两种常用方案选其一即可:
方案一:把<a>换成提交按钮
直接用<button>替代<a>作为表单提交按钮,同时调整样式保持页面布局一致:
<ul class="dropdown-menu"> <li> <form action="/barang/{{ $row->slug }}" method="POST"> @method('delete') @csrf <button type="submit" class="dropdown-item border-0 bg-transparent text-start w-100" onclick="return confirm('Data will be deleted. Continue?')"> <i class="bi bi-trash"></i> Hapus </button> </form> </li> </ul>
方案二:让<a>点击时提交表单
保留<a>标签,但修改onclick事件,触发表单提交并阻止默认跳转:
<ul class="dropdown-menu"> <li> <form action="/barang/{{ $row->slug }}" method="POST" id="delete-form-{{ $row->id }}"> @method('delete') @csrf <a class="dropdown-item" href="#" onclick="if(confirm('Data will be deleted. Continue?')) { document.getElementById('delete-form-{{ $row->id }}').submit(); } return false;"> <i class="bi bi-trash"></i> Hapus </a> </form> </li> </ul>
这里给表单加了唯一ID(用$row->id避免重复),确认后提交对应表单,return false阻止默认跳转行为。
额外优化建议
- 控制器的
destroy方法可以简化:因为已经通过路由模型绑定拿到了Barang实例,直接调用delete()更简洁:
public function destroy(Barang $barang) { $barang->delete(); return redirect('/barang')->with('barangSuccess', 'Data Barang berhasil dihapus'); }
- 确认下
$row->slug的值是否正确,确保和数据库中对应数据的slug一致,路由模型绑定才能正常匹配。
内容的提问来源于stack exchange,提问作者dapidmini
相关产品推荐
相关产品推荐

