ThinkPHP 5 的软删除 softDelete

现在 ThinkPHP 5 的版本到了5.0.10了。从5.0.0开始,think\Model类就提供了软删除的快捷操作。
SoftDelete是一个trait,可以方便地把记录标记为删除,而实际不删除。

为表类配置软删除

软删除的原理是,表中的一个字段(field),例如 delete_time,如果删除,就把当前时间写入。每次获取的时候,如果这个字段不是NULL就跳过而已。自己实现和恨简单,不过tp5已经有了就没必要自己动手了

<?php
namespace app\tbl;

use think\Model;
use traits\model\SoftDelete;

class Follower extends Model(){
    use SoftDelete;
    protected $deleteTime = 'delete_time';
    ...
}

表中的字段delete_time需要设置为varchar类型,虽然文档中说设置成datetimetimestamp可以的,but我的总是报错1,改成varchar(20)就好了。

使用软删除

例如用户取消关注了公众号,就把ta软删除了

use app\tbl\Follower;
...
Follower::destory($openid);
...

恢复软删除

例如用户又关注了,需要恢复用户的操作权限

use think\Db;
...
Db::table($table_prefix.'follower')->where('openid', $openid)->->update(['delete_time' => ['exp', 'null']]);
...

或者,也可以

use app\tbl\Follower;
...
$user =  Follower::onlyTrashed()->where('openid', $openid);
$user->update(['delete_time' => ['exp', 'null']]);

注意:上面不能使用save(),无效

$user->save('delete_time' => NULL, ['openid'=>$openid]);

直接使用(无效)是没有用的,因为已经::get()不到了,结果就是NULL

use app\tbl\Follower;
...
$user = Follower::get($openid);
$user->delete_time = NULL;
$user->save()
...

上面使用::withTrashed()::onlyTrashed()都可以

Reference

  1. hinkPHP5.x回收softDelete过的记录
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • CREATE TABLE IF NOT EXISTS ecs_order_info (order_id mediu...
    cookie口阅读 15,778评论 0 16
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 1. Java基础部分 基础部分的顺序:基本语法,类相关的语法,内部类的语法,继承相关的语法,异常的语法,线程的语...
    子非鱼_t_阅读 31,780评论 18 399
  • MySQL5.6从零开始学 第一章 初始mysql 1.1数据库基础 数据库是由一批数据构成的有序的集合,这些数据...
    星期四晚八点阅读 1,189评论 0 4
  • 我在初中的时候喜欢过一个人,那个时候我卑微得很,没有朋友,学习不好,长得也不好看,我就这样喜欢他三年,直到...
    怜阳ZT阅读 274评论 0 0