软硬删除操作
快捷删除助手可以简化数据软删除和硬删除操作,根据提交数据自动处理。
若在模型中需要使用到 DeleteHelper
快捷查询器,模型需要继承 \think\admin\Model
类;
若在控制器需要使用到 DeleteHelper
快捷查询器,控制器需要继承 \think\admin\Controller
类;
调用快捷删除
// 1.0 模型用法
// 参数 $field 主键字段,默认自动获取
// 参数 $where 限制条件,安全筛选删除
MyModel::mDelete(string $field, array $where);
// 1.1 模型通用删除
MyModel::mDelete();
// 1.2 指定数据主键
MyModel::mDelete('code');
// 1.3 指定数据主键,指定限定条件
MyModel::mDelete('code', [
'uuid' => $this->uuid,
'deleted' => 0,
]);
// 2.0 控制器用法
// 参数 $dbQuery 模型名称
// 参数 $field 主键字段,默认自动获取
// 参数 $where 限制条件,安全筛选删除
$this->_delete($dbQuery, string $field, array $where);
// 2.1 控制器通用删除
$this->_delete('MyModel');
// 2.2 指定数据主键
$this->_delete('MyModel', 'code');
// 2.3 指定数据主键,指定限定条件
$this->_delete('MyModel', 'code', [
'uuid' => $this->uuid,
'deleted' => 0,
]);
永久&硬删除
如果数据表中不存在is_deleted
或deleted
字段,则为硬删除。
标记&软删除
当前数据表中存在is_deleted
或deleted
字段时,调用DeleteHelper
则自动为软删除操作,在列表查询搜索时加上对应的条件就可以显示需要的数据列表。
快捷删除案例
对于数据删除的结果,可以进行自定义处理,回调函数规则如:[_ACTION]_delete_result
下面提供一个完整的 demo
:
/**
* 删除系统权限
* @auth true
*/
public function remove()
{
// 表单令牌,为防止重复操作,前端使用 data-csrf='{:systoken("remove")}'生成 token
$this->applyCsrfToken();
// MyModel::mDelete();
$this->_delete('MyModel');
}
/**
* 删除结果处理
* @param boolean $result
* @throws \think\Exception
* @throws \think\exception\PDOException
*/
protected function _remove_delete_result($result)
{
if ($result) {
$where = ['auth' => $this->request->post('id')];
$this->app->db->name('SystemAuthNode')->where($where)->delete();
$this->success("权限删除成功!", '');
} else {
$this->error("权限删除失败,请稍候再试!");
}
}
如果是在 ThinkAdmin
后台基于 admin.js
的情况下,可台使用 data-action
来与 DeleteHelper
配合使用。
前端提交上来的主键值支持多个,以英文逗号分隔。表单 CSRF
根据后台是否开启表单令牌而决定要不要配置使用。
批量删除操作列表时,前端使用 data-action='{:url("remove")}' data-csrf="{:systoken('remove')}" data-rule="id#{key}"
。
这里面的 {key}
会自动搜索表格已经选择的 checkbox
的值,通常是数据记录的 id
组合值。