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

如何在Backpack的show等操作中禁用软删除全局作用域查看已删除条目

解决方案

1. 在Backpack指定操作(如show)停用软删除全局作用域

你可以直接在对应操作的初始化方法中修改CRUD查询逻辑,移除软删除全局作用域即可。以show操作为例,在你的对应CRUD控制器中添加setupShowOperation方法:

protected function setupShowOperation()
{
    // 此处保留你原有的show操作字段配置等代码
    // 移除软删除全局作用域,允许查询已删除条目
    $this->crud->query->withTrashed();

    // 如果你需要完全移除软删除相关的所有限制,也可以使用下方代码
    // $this->crud->query->withoutGlobalScopes([
    //     \Illuminate\Database\Eloquent\SoftDeletingScope::class,
    // ]);
}

如果需要给edit、delete等其他操作也开放软删除条目查询权限,只需要在对应操作的setupXXXOperation方法中添加上述查询修改代码即可。

2. 解决backpack-revision扩展查看软删除条目修订记录的问题

backpack-revision默认会应用模型的全局作用域,导致无法找到已软删除的条目来加载修订记录,你只需要在使用RevisionOperation的CRUD控制器中重写findForRevision方法即可:

public function findForRevision($id)
{
    // 查找时跳过软删除全局作用域
    return $this->crud->model->withTrashed()->findOrFail($id);
}

如果你需要给revision操作的列表查询也开放软删除条目权限,可以在控制器的setup方法中添加如下配置:

protected function setup()
{
    // 原有CRUD配置保留
    $this->crud->operation('revision', function () {
        $this->crud->query->withTrashed();
    });
}

注意事项

  • 建议结合权限控制使用上述配置,仅给有权限查看软删除条目的角色开放相关能力,避免数据泄露
  • 不需要完全移除软删除全局作用域的场景下,优先使用withTrashed()方法,避免破坏其他全局作用域的正常生效

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.30 01:24:02