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

Laravel Livewire控制器无法读取{id},删除功能失效求助

问题解决步骤

1. 修复视图中的删除按钮

原代码里的<a>标签会触发默认跳转(导致URL末尾加问号),且错误使用了Vue风格的:wire:click指令,替换为按钮并修正Livewire语法:

<!-- 替换前 -->
<a href="#" :wire:click="deleteCategory({{$category->id}})" data-bs-toggle="modal" data-bs-target="#deleteModal" class="btn btn-danger">Delete</a>

<!-- 替换后 -->
<button type="button" wire:click="deleteCategory({{$category->id}})" data-bs-toggle="modal" data-bs-target="#deleteModal" class="btn btn-danger">Delete</button>

2. 修正控制器的deleteCategory方法

原方法试图使用路由模型绑定,但视图传递的是分类ID而非模型实例,调整方法接收ID并存储:

// 替换前
public function deleteCategory(Category $category_id)
{
    $this->category_id = $category_id;
}

// 替换后
public function deleteCategory($id)
{
    $this->category_id = $id;
}

3. 优化destroyCategory方法(可选)

删除后刷新分页数据,避免页面残留旧数据:

public function destroyCategory()
{
    $category = Category::findOrFail($this->category_id);
    $path = 'uploads/category/' . $category->image;

    if (File::exists($path)) {
        File::delete($path);
    }

    $category->delete();

    session()->flash('message', 'Category Deleted');
    // 重置分页页码,刷新数据列表
    $this->resetPage();
}

关键说明

  • Livewire的wire:click指令不需要加冒号,冒号是Vue的属性绑定语法,Livewire直接使用wire:click即可。
  • 使用<button>代替<a>标签,可避免默认跳转行为,解决URL添加问号的问题。
  • 用findOrFail替代find,能在找不到对应分类时抛出异常,便于调试定位问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 05:37:58