mysql softdelete_ThinkPHP 5 的软删除 softDelete

现在 ThinkPHP 5 的版本到了5.0.10了。从5.0.0开始,think\Model类就提供了软删除的快捷操作。

SoftDelete是一个trait,可以方便地把记录标记为删除,而实际不删除。

为表类配置软删除

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

namespace app\tbl;

use think\Model;

use traits\model\SoftDelete;

class Follower extends Model(){

use SoftDelete;

protected $deleteTime = 'delete_time';

...

}

表中的字段delete_time需要设置为varchar类型,虽然文档中说设置成datetime和timestamp可以的,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()都可以

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值