<?php
declare(strict_types=1);
* +----------------------------------------------------------------------
* | ThinkAdmin Plugin for ThinkAdmin
* +----------------------------------------------------------------------
* | 版权所有 2014~2026 ThinkAdmin [ thinkadmin.top ]
* +----------------------------------------------------------------------
* | 官方网站: https://thinkadmin.top
* +----------------------------------------------------------------------
* | 开源协议 ( https://mit-license.org )
* | 免责声明 ( https://thinkadmin.top/disclaimer )
* | 会员特权 ( https://thinkadmin.top/vip-introduce )
* +----------------------------------------------------------------------
* | gitee 代码仓库:https://gitee.com/zoujingli/ThinkAdmin
* | github 代码仓库:https://github.com/zoujingli/ThinkAdmin
* +----------------------------------------------------------------------
*/
namespace think\admin\helper;
use think\admin\Helper;
use think\db\BaseQuery;
use think\db\exception\DbException;
use think\Model;
* 通用删除管理器.
* @class DeleteHelper
*/
class DeleteHelper extends Helper
{
* 逻辑器初始化.
* @param BaseQuery|Model|string $dbQuery
* @param string $field 操作数据主键
* @param mixed $where 额外更新条件
* @return bool|void
* @throws DbException
*/
public function init($dbQuery, string $field = '', $where = [])
{
$query = static::buildQuery($dbQuery);
$field = $field ?: ($query->getPk() ?: 'id');
$value = $this->app->request->post($field);
if (!empty($where)) {
$query->where($where);
}
if (!isset($where[$field]) && is_string($value)) {
$query->whereIn($field, str2arr($value));
}
if ($this->class->callback('_delete_filter', $query, $where) === false) {
return false;
}
if (!$query->getOptions('where')) {
$this->class->error('数据删除失败!');
}
// 组装执行数据
$data = [];
if (method_exists($query, 'getTableFields')) {
$fields = $query->getTableFields();
if (in_array('deleted', $fields)) {
$data['deleted'] = 1;
}
if (in_array('is_deleted', $fields)) {
$data['is_deleted'] = 1;
}
if (isset($data['deleted']) || isset($data['is_deleted'])) {
if (in_array('deleted_at', $fields)) {
$data['deleted_at'] = date('Y-m-d H:i:s');
}
if (in_array('deleted_time', $fields)) {
$data['deleted_time'] = time();
}
}
}
if ($result = (empty($data) ? $query->delete() : $query->update($data)) !== false) {
$model = $query->getModel();
if ($model instanceof \think\admin\Model) {
$model->onAdminDelete(strval($value));
}
}
if ($this->class->callback('_delete_result', $result) === false) {
return $result;
}
if ($result !== false) {
$this->class->success('数据删除成功!', '');
} else {
$this->class->error('数据删除失败!');
}
}
}