如何在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
相关产品推荐
相关产品推荐

