针对数据软删除的改进

浏览:1267 发布日期:2018/10/31 分类:ThinkPHP5专区 关键字: thinkphp softdelete 软删除
在thinkphp5中是通过softdelete trait实现数据软删除的。在使用中需要在模型定义中引入softdelete trait,并添加protected $deleteTime = 数据库字段,即可实现数据的软删除操作。软删除后,通过sql查看数据库表发现,在相应的字段中添加了时间戳内容。
虽然,thinkphp5的上述功能能够实现数据的软删除,但是,在实际数据库表设计中,经常是设置独立的字段表示当前记录的状态。如:status字段,或is_deleted字段。而该字段的数据类型也往往设计成“整形”或“字符型”,这就与thinkphp5中softdelete要求的类型不匹配。因此,给予以上的原因,本人对softdelete进行一些改进,能够实现记录当前记录的删除状态、删除时间信息。具体代码如下:
1 在softdelete中增加getDeleteField函数,提取需要设置记录删除状态的字段。
/**
* 获取软删除标记字段
* @access public
* @param bool $read 是否查询操作(写操作的时候会自动去掉表别名)
* @return string
*/
protected function getDeleteField($read = false)
{
$field = property_exists($this, 'deleteField') && isset($this->deleteField) ?
$this->deleteField : 'is_delete';

if (false === $field) {
return false;
}

return $field;
}

2 在delete函数中增加
$field=$this->getDeleteField();

3 修改delete函数中if功能
if (($name || $field) && !$force) {
if ($name){
// 原软删除处理逻辑
// 软删除
$this->data[$name] = $this->autoWriteTimestamp($name);
}

if ($field){
// 新增软删除处理逻辑
// 软删除
foreach ($field as $key=>$value){
$this->data[$key] = $value;
}
}
$result = $this->isUpdate()->save();
} else {
// 强制删除当前模型数据
$result = $this->getQuery()->where($this->getWhere())->delete();
}

4 在用户模型中设置
protected $deleteTime='delete_time';// 保存软删除时间字段
protected $deleteField=['is_delete'=>1];// 保存软删除状态字段及状态信息

5 使用方法不变

本人才疏学浅,初识thinkphp,难免有误,望各位见谅,并予以赐教,不胜感激。
最佳答案
评论( 相关
后面还有条评论,点击查看>>