ThinkPHP软删除实现方法详解
ThinkPHP6通过SoftDelete实现软删除,需模型继承Model并引入SoftDeletetrait,设置$deleteTime字段;数据库添加delete_time字段存储删除时间;调用delete()标记删除,自动更新delete_time;查询时默认过滤已删除数据,可用withTrashed()或onlyTrashed()包含或仅查删除数据;restore()方法可恢复已删除记录。
ThinkPHP 6通过SoftDelete实现软删除,需模型继承Model并引入SoftDelete trait,设置$deleteTime字段;数据库添加delete_time字段存储删除时间;调用delete()标记删除,自动更新delete_time;查询时默认过滤已删除数据,可用withTrashed()或onlyTrashed()包含或仅查删除数据;restore()方法可恢复已删除记录。

ThinkPHP 的软删除功能主要用于标记数据为“已删除”状态,而不是真正从数据库中物理删除记录。这种方式可以保留历史数据,便于后续恢复或审计。ThinkPHP 6.0 版本原生支持软删除功能,以下是具体实现方式。
启用软删除
要在模型中使用软删除,需让模型类继承 think\Model 并使用 think\model\concern\SoftDelete trait。
注意:ThinkPHP 6 默认未加载 SoftDelete,需要手动引入并配置。示例代码:
namespace app\model;use think\Model; use think\model\concern\SoftDelete;
class User extends Model { use SoftDelete;
// 定义软删除字段,默认为 delete_time protected $deleteTime = 'delete_time';}
数据库字段设置
软删除依赖一个时间字段来记录删除时间。通常这个字段名为 delete_time,类型为 DATETIME 或 TIMESTAMP,允许为空。
建表时添加该字段:
-- 示例 SQL CREATE TABLE `user` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(50) NOT NULL, `create_time` datetime DEFAULT NULL, `update_time` datetime DEFAULT NULL, `delete_time` datetime DEFAULT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4;
执行软删除操作
调用模型的 delete() 方法时,如果启用了软删除,系统会自动更新 delete_time 字段,而不是删除记录。
示例:
$user = User::find(1);
if ($user) {
$user->delete(); // 软删除,update delete_time = NOW()
}
此时数据库中该记录依然存在,只是 delete_time 被写入当前时间。
查询时自动过滤已删除数据
默认情况下,使用模型查询时会自动排除已软删除的记录(即 delete_time 不为 NULL 的数据)。
例如:
User::select();
这条语句只会返回 delete_time 为 NULL 的记录。
如需查询包含已删除的数据,可使用:
User::withTrashed()->select();
只查已被软删除的数据:
User::onlyTrashed()->select();
恢复已软删除的数据
可以通过调用 restore() 方法将软删除的记录恢复。
示例:
$user = User::onlyTrashed()->find(1);
if ($user) {
$user->restore(); // 将 delete_time 设为 NULL
}
恢复后,该记录重新参与正常查询。
基本上就这些。只要模型正确使用 SoftDelete trait,数据库有 delete_time 字段,框架就会自动处理软删除逻辑。不复杂但容易忽略字段和命名的一致性。
Windows 10 是一款微软推出的经典操作系统,拥有硬件兼容性与多任务处理能力。它更偏向把系统状态查看和常用调节动作放在一起,适合需要持续观察和微调设备状态的场景。
极度公式是一款跨平台专业LaTeX公式识别编辑软件,支持OCR公式识别和多平台编辑。和使用说明,避免使用,享受完整功能与稳定支持。做扫描整理、文字提取和表格转换时,它能把识别后的处理步骤接得更顺,资料录入这类场景会省下不少时间。
















