tp中有个模型删除很好用destroy
可以直接删除单个,也可以批量删除,还支持真假删除,以及一些闭包操作以支持更丰富的语法
//单个删除
MyModel::destroy(1);
//批量删除
MyModel::destroy([1,2]);
//真删除
MyModel::destroy(1,true);
//闭包删除
MyModel::destroy(function($query){
$query->where('id','>',10);
});
但这个方法其实也有些弊端:
1,只能征对主键删除
//如果kid不是主键,那么以下语句没有任何意义
ousekeepItems::destroy(function ($query) use ($id) {
$query->where(['kid' => $id]);
}, true);
2,批量删除时的性能问题
destroy()
操作时,会先进行select()
查询操作,再一个个去修改或者删除,从性能上来讲,其实不好。
这种情况下,我就只有放弃这个语法了,单纯使用db类来达到真删除操作,直接修改来实现软删除:
Db::name('test')->where(['kid' => $idArr])->delete();
在公共模型中加一个支持软删除的方法:
public static function softDelete(array $where)
{
return self::update(['delete_time' => time()], $where, ['delete_time']);
}