首页 > php框架 > ThinkPHP > 正文

thinkphp软删除(softDelete)功能如何实现

尼克
发布: 2025-09-23 13:28:01
原创
762人浏览过
ThinkPHP 6通过SoftDelete实现软删除,需模型继承Model并引入SoftDelete trait,设置$deleteTime字段;数据库添加delete_time字段存储删除时间;调用delete()标记删除,自动更新delete_time;查询时默认过滤已删除数据,可用withTrashed()或onlyTrashed()包含或仅查删除数据;restore()方法可恢复已删除记录。

thinkphp软删除(softdelete)功能如何实现

ThinkPHP 的软删除功能主要用于标记数据为“已删除”状态,而不是真正从数据库中物理删除记录。这种方式可以保留历史数据,便于后续恢复或审计。ThinkPHP 6.0 版本原生支持软删除功能,以下是具体实现方式。

启用软删除

要在模型中使用软删除,需让模型类继承 think\Model 并使用 think\model\concern\SoftDelete trait。

注意:ThinkPHP 6 默认未加载 SoftDelete,需要手动引入并配置。

示例代码:

namespace app\model;
<p>use think\Model;
use think\model\concern\SoftDelete;</p><p>class User extends Model
{
use SoftDelete;</p><pre class='brush:php;toolbar:false;'>// 定义软删除字段,默认为 delete_time
protected $deleteTime = 'delete_time';
登录后复制

}

立即学习PHP免费学习笔记(深入)”;

数据库字段设置

软删除依赖一个时间字段来记录删除时间。通常这个字段名为 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 的数据)。

例如:

ViiTor实时翻译
ViiTor实时翻译

AI实时多语言翻译专家!强大的语音识别、AR翻译功能。

ViiTor实时翻译116
查看详情 ViiTor实时翻译

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 字段,框架就会自动处理软删除逻辑。不复杂但容易忽略字段和命名的一致性。

以上就是thinkphp软删除(softDelete)功能如何实现的详细内容,更多请关注php中文网其它相关文章!

PHP速学教程(入门到精通)
PHP速学教程(入门到精通)

PHP怎么学习?PHP怎么入门?PHP在哪学?PHP怎么学才快?不用担心,这里为大家提供了PHP速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习
PHP中文网抖音号
发现有趣的

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号