在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。
第一步:在数据库添加字段“delete_time”
字段类型可以是datetime,也可以是int(版本Tp5.0最好使用int);同时它的默认值必须为null
注意:版本为Thinkph5,数据库字段“delete_time”类型最好int;如果类型是datetime,它的值就变成了"0000-00-00 00:00:00"。Thinkphp5.1没有这个问题,这应该是版本的问题。
第二步:要使用软删除功能,需要引入SoftDelete
<?php namespace appindexmodel; use thinkModel; use traitsmodelSoftDelete; 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);
如果你想自己写,使用useSoftDelete给delete_time赋值
//使用useSoftDelete给的delete_time赋值 Shopping::whereIn('id',[10,12])->useSoftDelete('delete_time', date("Y-m-d H:i:s",time()))->delete();
默认情况下查询的数据不包含软删除数据,如果需要包含软删除的数据,可以使用下面的方式查询:
Shopping::withTrashed()->find(); Shopping::withTrashed()->select();//查询全部数据,包括软删除
如果仅仅需要查询软删除的数据,可以使用:
Shopping::onlyTrashed()->find();
Shopping::onlyTrashed()->select();
回复软删除数据:
//获取已经被软删除的数据 $del = Shopping::onlyTrashed()->where(['id'=>1,'name'=>"lhs"])->find(); //回复软删除 $del->restore();
注意:如果你的模型定义了base
基础查询,请确保添加软删除的基础查询条件