Thinkph5模型软删除

在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。

第一步:在数据库添加字段“delete_time”

字段类型可以是datetime,也可以是int(版本Tp5.0最好使用int);同时它的默认值必须为null

注意:版本为Thinkph5,数据库字段“delete_time”类型最好int;如果类型是datetime,它的值就变成了"0000-00-00 00:00:00"。Thinkphp5.1没有这个问题,这应该是版本的问题。

 

第二步:要使用软删除功能,需要引入SoftDelete

<?php
namespace app\index\model;
use think\Model;
use traits\model\SoftDelete;

class Shopping extends Model     //购物车
{
    use SoftDelete;
    protected $deleteTime = 'delete_time';
}

我们在调用模型查询,它自动加上where把已经软删除的过滤掉

 

第三步:使用软删除

//软删除
Shopping::destroy(1);//这里输入值它的id;成功就返回1
//真实删除
Shopping::destroy(1,true);
$shopping = Shopping::get(1); //软删除 $shopping->delete(); //真实删除 $shopping->delete(true);

默认情况下查询的数据不包含软删除数据,如果需要包含软删除的数据,可以使用下面的方式查询:

Shopping::withTrashed()->find();
Shopping::withTrashed()->select();//查询全部数据,包括软删除

如果仅仅需要查询软删除的数据,可以使用:

Shopping::onlyTrashed()->find();
Shopping::onlyTrashed()->select();

回复软删除数据:

//获取已经被软删除的数据
$del = Shopping::onlyTrashed()->where(['id'=>1,'name'=>"lhs"])->find();
//回复软删除
$del->restore();

注意:如果你的模型定义了base基础查询,请确保添加软删除的基础查询条件