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

Laravel Backpack:如何检查记录软删除并隐藏编辑按钮?

在Laravel Backpack 5.x(Laravel 8.x)中隐藏软删除记录的编辑按钮

你的代码存在两处问题:

  1. 判断软删除的语法错误,Laravel中需调用模型的trashed()方法,而非{is_trashed}这种写法;
  2. 列表页面向多条记录,$this->crud->getCurrentEntry()通常用于单条记录页面(如详情、编辑页),无法直接在列表中批量判断每条记录的状态。

以下是两种可行的实现方式:

方式一:修改编辑操作的可见性

在CrudController的setupListOperation()方法中,为编辑操作添加可见性判断,仅未软删除的记录显示编辑按钮:

$this->crud->operation('list', function() {
    // 修改已有的编辑操作
    $this->crud->modifyOperation('edit', function($operation) {
        $operation->visible(function($entry) {
            // 未软删除时显示编辑按钮
            return !$entry->trashed();
        });
    });
});

如果是自定义新增编辑操作,可直接写入判断逻辑:

$this->crud->addOperation([
    'name' => 'edit',
    'label' => '编辑',
    'type' => 'button',
    'url' => fn($entry) => backpack_url('your-model/' . $entry->id . '/edit'),
    'visible' => fn($entry) => !$entry->trashed()
]);

方式二:配合软删除过滤器(可选)

若模型已引入SoftDeletes trait,Backpack默认会在列表页显示「已删除」过滤器。可设置默认展示未删除记录,再结合上述操作可见性判断:

// 在setupListOperation中配置软删除过滤器
$this->crud->addFilter([
    'type' => 'trashed',
    'name' => 'trashed',
    'label' => '状态'
], null, function($value) {
    if ($value == 'trashed') {
        $this->crud->query = $this->crud->query->onlyTrashed();
    } elseif ($value == 'all') {
        $this->crud->query = $this->crud->query->withTrashed();
    }
    // 默认显示未删除记录
});

注意事项

  • 确保模型已引入Illuminate\Database\Eloquent\SoftDeletes trait;
  • 数据库表需包含deleted_at字段(迁移时使用$table->softDeletes());
  • 测试时可分别创建正常记录和软删除记录,验证编辑按钮的显示逻辑。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.23 03:58:25