软硬删除操作

快捷删除助手可以简化数据软删除和硬删除操作,根据提交数据自动处理。

若在模型中需要使用到 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_deleteddeleted字段,则为硬删除。

标记&软删除

当前数据表中存在is_deleteddeleted字段时,调用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 组合值。

Last Updated:
Contributors: 邹景立