什么是软删除

后台操作,删除一条记录,不希望真正的从数据库中删除,用个字段标记一下。比如delete_at。默认0。当执行删除操作,更新delete_at为当前时间戳

这样列表显示的时候只查询delete_at为0的记录。

牵涉到Yii2的中的操作

引入SoftDeleteBehavior文件

<?php

namespace common\behavior;

use yii\base\Behavior;
use yii\base\Event;
use yii\db\ActiveRecord; class SoftDeleteBehavior extends Behavior
{
/**
* @var string delete time attribute
*/
public $timeAttribute = false;
/**
* @var string status attribute
*/
public $statusAttribute = "is_deleted";
/**
* @var string deleted status attribute
*/
public $deletedValue = 1; /**
* @var string active status attribute
*/
public $activeValue = 0; /**
* @inheritdoc
*/
public function events() {
return [
ActiveRecord::EVENT_BEFORE_DELETE => 'softDelete',
];
}
/**
* Set the attribute deleted
*
* @param Event $event
*/
public function softDelete($event) {
$attributes[1] = $this->statusAttribute;
$_attribute = $attributes[1];
if($this->timeAttribute) {
$this->owner->$_attribute = time();
} else {
$this->owner->$attributes[1] = $this->deletedValue;
}
// save record
$this->owner->save(false, $attributes);
//prevent real delete
$event->isValid = false;
}
/**
* Restore soft-deleted record
*/
public function restore() {
$attributes[1] = $this->statusAttribute;
$this->owner->$attributes[1] = $this->activeValue;
// save record
$this->owner->save(false, $attributes);
}
/**
* Force delete from database
*/
public function forceDelete() {
// store model so that we can detach the behavior and delete as normal
$model = $this->owner;
$this->detach();
$model->delete();
}
}

在需要使用的Model中

use common\behavior\SoftDeleteBehavior;
// ...
public function behaviors() {
return [
'softDelete' => ['class' => SoftDeleteBehavior::className(),
'timeAttribute' => true,
'statusAttribute' => 'deletedAt',
],
];
}

Controler中不用改

    public function actionDelete($id)
{
$this->findModel($id)->delete(); return $this->redirect(['index']);
}

如果真正删除,就是硬删除。

执行 $this->findModel($id)->forceDelete();

Yii2 软删除的更多相关文章

  1. tp5 model 中的软删除

    model中需use traits\model\SoftDelete; // 数据表中需添加一个 delete_time 字段保存删除时间 namespace app\index\model; use ...

  2. laravel框架总结(九) -- 软删除

    当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...

  3. 软删除脏数据job笔记

    某次处理一个case,发现线上库里有很多数据有问题.于是决定写一个job来将有问题的数据软删除掉.涉及到的两条SQL语句如下: <select id="loadTSKTVBillDai ...

  4. 关于Domino数据库的软删除

    在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...

  5. Mysql软删除

    所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删 ...

  6. 数据的软删除-管理员的CRUD

    数据的“软删除”---把数据真正删除在某些时候会有问题.IsDeleted字段,false表示不删除,而是让用户可以看到,true表示是软删除,用户看不到. 一个表引用另外一张表的时候一定要引用主键. ...

  7. Entity Framework Core 软删除与查询过滤器

    本文翻译自<Entity Framework Core: Soft Delete using Query Filters>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意 ...

  8. laravel and lumen 软删除操作

    知识都是有联系的,这绝对是真理.作为一名小白,看了一点官方文档,把我自己理解的软删除操作给大家讲讲.有些就是套用官方文档的话. 定义:什么是软删除呢,所谓软删除指的是数据表记录并未真的从数据库删除,而 ...

  9. LindDotNetCore~ISoftDelete软删除接口

    回到目录 概念 ISoftDelete即软删除,数据在进行delete后不会从数据库清除,而只是标记一个状态,在业务范围里都不能获取到这个数据,这在ORM框架里还是比较容易实现的,对传统的ado来说需 ...

随机推荐

  1. 修改SQL Server数据库表的创建时间最简单最直接有效的方法

    说明:这篇文章是几年前我发布在网易博客当中的原创文章,但由于网易博客现在要停止运营了,所以我就把这篇文章搬了过来,因为这种操作方式是通用的,即使是对现在最新的SQL Server数据库里面的操作也是一 ...

  2. MySQL锁(行锁、表锁、页锁、乐观锁、悲观锁等)

    锁,在现实生活中是为我们想要隐藏于外界所使用的一种工具.在计算机中,是协调多个进程或县城并发访问某一资源的一种机制.在数据库当中,除了传统的计算资源(CPU.RAM.I/O等等)的争用之外,数据也是一 ...

  3. spring mvc 接收 put参数

    web.xml中: <!-- 用户put提交参数 --> <filter> <filter-name>HttpMethodFilter</filter-nam ...

  4. MySQL基础之 如何删除主键

    我们在一个表中设置了主键之后,那么如何删除主键呢? 删除主键的语法是: ALTER TABLE TABLE_NAME DROP PRIMARY KEY; 在这里我们要考虑两种情况: 1.可以直接使用d ...

  5. centos中,tomcat项目创建文件的权限

    参考文章:https://cloud.tencent.com/info/5f02caa932fd6dbfc46a3bb01af135e0.html 我们在centos中输入umask,会看到输出002 ...

  6. 一次SQLServer数据库宕机问题

    数据库采用SQL Server 2005版本, 数据库文件约为6G,而LDF日志文件已经高达36G. 服务器开始变的不太稳定 .数据没有成功保存. 打开事件查看器发现很多信息日志 数据库 '' 中的文 ...

  7. 阿里八八Alpha阶段Scrum(8/12)

    今日进度 叶文滔: 已经成功解决兼容性问题,目前正在嵌入多级按钮API,预计明天可以完成 王国超: 今天终于debug了,被卡了几天的fragment嵌套listview终于成功了 俞鋆: 研究了一下 ...

  8. SVG绘制图形

    一.SVG介绍 1.SVG指可伸缩矢量图片 2.SVG用来定义用于网络的基于矢量的图形 3.SVG使用XML格式定义图形 4.SVG图像在放大或改变尺寸的情况下其图形质量不会有损失 5.SVG是万维网 ...

  9. 2879: [Noi2012]美食节

    Description CZ市为了欢迎全国各地的同学,特地举办了一场盛大的美食节.作为一个喜欢尝鲜的美食客,小M自然不愿意错过这场盛宴.他很快就尝遍了美食节所有的美食.然而,尝鲜的欲望是难以满足的.尽 ...

  10. linux下apache中httpd.conf的ServerAdmin 是设置的什么?

    <VirtualHost 127.0.0.1:80> ServerAdmin ******@****.com DocumentRoot /home/aaa/sss ServerName s ...