TP6.0 软删除与数据恢复的正确姿势【防删库】

陌杰大大_5912

陌杰大大_5912

2026-07-07

250人浏览

原创

误删数据后restore()无效,需满足三个前提:①模型启用softdelete并定义$deletetime;②低版本需设$usesoftdelete=true;③刷新schema缓存;同时delete_time字段必须为nullable的datetime/timestamp类型。

tp6.0 软删除与数据恢复的正确姿势【防删库】

误删线上用户数据后,直接调用restore()却没反应,数据库里delete_time字段依然非空,业务订单状态错乱,客户投诉电话已经打爆——这不是bug,是你没踩对TP6.0软删除恢复的三个致命前提。

确认模型真正启用了SoftDelete

第一步:打开你的模型文件,检查是否同时满足以下三项,缺一不可:
① 引入了use think\model\concern\SoftDelete;
② 类内声明了use SoftDelete;
③ 设置了protected $deleteTime = 'delete_time';

第二步:如果是ThinkPHP 6.0之前的低版本(如6.0.0~6.0.7),必须显式开启开关:protected $useSoftDelete = true;。6.0.8+可省略,但写上更保险。

第三步:运行php think optimize:schema刷新模型缓存,避免旧缓存导致配置未生效。

注意:只写了use SoftDelete;但漏掉$useSoftDelete = true;(低版本)或$deleteTime字段定义,【restore()会静默返回false,不报错也不写库】。

检查delete_time字段的数据库定义

执行SQL查字段结构:DESCRIBE user;(把user换成你的真实表名)

确认delete_time字段类型为DATETIME或TIMESTAMP,且Null列值为YES,Default为NULL。

如果显示NO或默认值是'1970-01-01'这类固定时间,框架尝试写入NULL时会被MySQL直接拒绝,而PHP层捕获不到这个错误,【restore()看似执行成功,实则数据库毫无变化】。

修复方法:执行ALTER语句重置字段允许为空:ALTER TABLE `user` MODIFY COLUMN `delete_time` DATETIME NULL DEFAULT NULL;

单条数据恢复:先查再restore

方法一(推荐):
① 从软删池中精确取出目标记录:$user = UserModel::onlyTrashed()->find(123);
② 调用实例方法恢复:$user->restore();
③ 检查返回值:if (!$user->restore()) { throw new Exception('恢复失败,请检查模型配置与字段定义'); }

电子产品维修服务公司网站模板
电子产品维修服务公司网站模板

电子产品维修服务公司网站模板是一款提供手机、电脑、平板等维修服务的公司宣传网站模板下载。提示:本模板调用到谷歌字体库,可能会出现页面打开比较缓慢。

下载

方法二(绕过模型事件,直写数据库):
UserModel::where('id', 123)->update(['delete_time' => null]);
这一步跳过所有验证和restored事件,仅适用于紧急救火且无需触发回调的场景。

批量恢复:绝不能链式调用restore()

错误写法:UserModel::onlyTrashed()->where('status', 1)->restore();
这是无效操作——restore()只作用于单个模型实例,而onlyTrashed()->where()返回的是查询构造器,不是模型集合。

正确做法分两步:
第一步:提取ID列表:$ids = UserModel::onlyTrashed()->where('status', 1)->column('id');
第二步:批量更新字段:UserModel::whereIn('id', $ids)->update(['delete_time' => null]);

若需触发restored事件,改用分块处理:UserModel::onlyTrashed()->where('status', 1)->chunk(500, function ($users) { $users->each->restore(); });,注意闭包内必须判断每条$user->restore()的返回值。

关键提醒:【批量恢复必须包裹在事务中】,否则某条失败会导致部分数据已恢复、部分仍软删,状态撕裂无法回滚。

关联数据恢复:不会自动连带,必须手动逐层处理

$user->restore()只清空user表的delete_time字段,订单、地址、日志等关联表哪怕也启用了SoftDelete,也不会被连带恢复。

不能写:$user->with(['orders'])->restore();——with()默认过滤软删记录,根本查不到任何订单。

正确路径:
① 查出该用户的软删订单:$orders = $user->orders()->onlyTrashed()->select();
② 遍历恢复:$orders->each->restore();

量大时建议用Db直写:Db::name('order')->where('user_id', $user->id)->whereNotNull('delete_time')->update(['delete_time' => null]);,但会跳过事件和验证逻辑。

相关文章

数据恢复工具app
数据恢复工具app

手机里的数据丢失了怎么办?聊天记录不小心删掉了怎么办?不用担心,这里为大家提供了数据恢复工具app下载,安全正规,有需要的小伙伴保存下载,就轻松恢复数据啦!

下载

相关标签:

数据恢复

本站声明:本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn

相关专题

更多
Buffalo框架数据库开发全教程
Buffalo框架数据库开发全教程

本专题围绕Buffalo框架数据库开发,讲解database.yml多环境配置、soda与fizz迁移生成回滚、模型结构体标签、增删改查与条件查询、一对多与多对多关联、数据校验、回调钩子、事务处理及原生SQL执行能力。

2026.09.23

140

15

Buffalo框架路由与请求处理实操指南
Buffalo框架路由与请求处理实操指南

本专题讲解Buffalo框架路由与请求处理机制,涵盖路由注册与分组、资源路由、Handler编写规范、Context上下文方法、参数绑定、中间件编写挂载、Session与Cookie读写、Flash消息及错误页面定制方法。

2026.09.23

80

15

Buffalo框架零基础入门教程
Buffalo框架零基础入门教程

本专题整理Buffalo框架入门内容,涵盖Go环境准备、buffalo CLI安装、新项目生成、目录结构说明、dev热加载启动、数据库连接配置与常见报错排查,帮助新手按约定优于配置的思路跑通第一个Buffalo框架应用。

2026.09.23

60

15

Conan创建软件包配方指南
Conan创建软件包配方指南

本专题介绍通过conanfile.py创建软件包的方法,讲解包名、版本、依赖和构建设置等基础信息,以及source、build、package、package_info等常用方法的作用及编写思路。

2026.09.22

40

12

Conan二进制包配置指南
Conan二进制包配置指南

本专题介绍Conan根据操作系统、编译器、架构和构建类型生成二进制包的方法,讲解Profile、Settings、Options及Package ID的作用,帮助管理不同平台和编译环境下的包版本。

2026.09.22

60

13

Conan私有仓库搭建教程
Conan私有仓库搭建教程

本专题系统的讲解Conan私有仓库的搭建流程,涵盖仓库服务部署、存储目录配置、用户认证、权限划分和远程地址添加,并介绍内部C++依赖包的上传、下载及版本维护方法。

2026.09.22

40

19

loomy官网入口地址合集
loomy官网入口地址合集

本专题汇总了 Loomy 桌面 AI 助理的官方入口地址合集及使用指南。提供 macOS 与 Windows 客户端下载 。Loomy 是讯飞推出的桌面级 AI 工作搭子,支持文件整理、数据分析、网页操作及通过飞书/钉钉远程操控电脑,助你高效完成本地办公任务 。

2026.09.22

40

19

NumPy常见函数使用方法
NumPy常见函数使用方法

本专题整理 NumPy 常见函数使用方法相关教程,覆盖函数大全、参数用法、数组运算、统计聚合、排序处理、where 条件筛选、linspace 创建数列等常用场景,帮助读者快速掌握 NumPy 函数调用思路和实际数据处理技巧。

2026.09.22

60

21

NumPy性能优化版本更新与常见报错排查
NumPy性能优化版本更新与常见报错排查

本专题整理 NumPy 性能优化、版本更新与常见报错排查相关教程,覆盖向量化计算、广播性能、内存布局、NumPy 2.0 升级、版本兼容冲突、安装导入报错、dtype 溢出、矩阵运算异常和 broadcasting 报错修复,帮助读者系统掌握 NumPy 性能调优与问题定位方法。

2026.09.22

80

25

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
热门推荐
/
最新课程
phpStudy极速入门视频教程
phpStudy极速入门视频教程

共6课时 | 54.6万人学习

独孤九贱(4)_PHP视频教程
独孤九贱(4)_PHP视频教程

共89课时 | 133.3万人学习