You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Laravel单条记录删除异常求助:点击任意删除按钮均删第一条记录

解决Laravel删除按钮总是删除第一条记录的问题

嘿,我来帮你搞定这个问题!你遇到的核心问题很明确:循环生成的所有删除表单都用了同一个id="delete-form",浏览器在查找ID元素时只会返回第一个匹配的元素,所以不管你点哪一行的删除按钮,最终提交的都是第一条记录对应的表单,这就导致了错误删除第一条数据的情况。

下面给你几个简单有效的解决方案:

方案1:给每个表单设置唯一ID

把表单的ID改成包含公司ID的唯一值,这样每个删除按钮就能精准找到对应的表单:

<td>
    <a onclick="var result = confirm('Are you sure you wish to delete this Company?'); if(result){ event.preventDefault(); document.getElementById('delete-form-{{$company->id}}').submit(); }" class="btn btn-xs btn-default">
        <i class="fa fa-trash"></i>
    </a>
    <form id="delete-form-{{$company->id}}" action="{{ route('companies.destroy', [$company->id]) }}" method="POST" style="display: none;">
        <input type="hidden" name="_method" value="DELETE">
        {{ csrf_field() }}
    </form>
</td>

方案2:通过兄弟元素定位表单(更简洁)

不用手动管理唯一ID,直接利用DOM的兄弟关系来获取当前按钮对应的表单,代码更清爽:

<td>
    <a onclick="var result = confirm('Are you sure you wish to delete this Company?'); if(result){ event.preventDefault(); this.nextElementSibling.submit(); }" class="btn btn-xs btn-default">
        <i class="fa fa-trash"></i>
    </a>
    <form action="{{ route('companies.destroy', [$company->id]) }}" method="POST" style="display: none;">
        <input type="hidden" name="_method" value="DELETE">
        {{ csrf_field() }}
    </form>
</td>

额外优化:简化控制器的destroy方法

你已经用了路由模型绑定(方法参数是Company $company),这意味着Laravel已经自动帮你查询到了对应的公司实例,不需要再手动调用findOrFail啦,简化后的代码更高效:

public function destroy(Company $company) {
    if($company->delete()){
        return redirect()->route('companies.index')
            ->with('success', 'Company deleted successfully');
    }
    return back()->withInput()->with('error', 'Company could not be deleted');
}

这样修改后,点击任意删除按钮就能正确删除对应的记录了,试试吧!

内容的提问来源于stack exchange,提问作者kya

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.15 06:55:55