Yii2 软删除
什么是软删除
后台操作,删除一条记录,不希望真正的从数据库中删除,用个字段标记一下。比如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 软删除的更多相关文章
- tp5 model 中的软删除
model中需use traits\model\SoftDelete; // 数据表中需添加一个 delete_time 字段保存删除时间 namespace app\index\model; use ...
- laravel框架总结(九) -- 软删除
当模型被软删除时,它们并不会真的从数据库中被移除.而是会在模型上设置一个 deleted_at 属性并将其添加到数据库.如果对应模型被软删除,则deleted_at字段的值为删除时间,否则该值为空. ...
- 软删除脏数据job笔记
某次处理一个case,发现线上库里有很多数据有问题.于是决定写一个job来将有问题的数据软删除掉.涉及到的两条SQL语句如下: <select id="loadTSKTVBillDai ...
- 关于Domino数据库的软删除
在Domino的数据库属性的 “高级” 附签(选择文件->数据库->属性),选中“允许软删除”,这样我们就启用了软删除功能,当一个文档没有删除的时候我们可以使用NotesDatabase的 ...
- Mysql软删除
所谓软删除(Soft Deleting),即在删除数据表中的数据时,并不直接将其从数据表中删除,而是将其标志为删除,即在每张表中设置一个删除字段(如:IsDeleted)等,默认情况下其值为0,及未删 ...
- 数据的软删除-管理员的CRUD
数据的“软删除”---把数据真正删除在某些时候会有问题.IsDeleted字段,false表示不删除,而是让用户可以看到,true表示是软删除,用户看不到. 一个表引用另外一张表的时候一定要引用主键. ...
- Entity Framework Core 软删除与查询过滤器
本文翻译自<Entity Framework Core: Soft Delete using Query Filters>,由于水平有限,故无法保证翻译完全正确,欢迎指出错误.谢谢! 注意 ...
- laravel and lumen 软删除操作
知识都是有联系的,这绝对是真理.作为一名小白,看了一点官方文档,把我自己理解的软删除操作给大家讲讲.有些就是套用官方文档的话. 定义:什么是软删除呢,所谓软删除指的是数据表记录并未真的从数据库删除,而 ...
- LindDotNetCore~ISoftDelete软删除接口
回到目录 概念 ISoftDelete即软删除,数据在进行delete后不会从数据库清除,而只是标记一个状态,在业务范围里都不能获取到这个数据,这在ORM框架里还是比较容易实现的,对传统的ado来说需 ...
随机推荐
- fastclick select 闪退 bug
这时候needsclick就派上用场了 <select class='needsclick'></select> 附上fastclick github上的链接
- ionic默认样式android和ios差异
ionicframework中android和ios在默认样式上有一些不同的地方,官方文档中都有说明,但是经常会想不起. 一.差异: 1.tab位置,$ionicConfigProvider, tab ...
- Oracle EBS OPM 生产批创建事务处理
--生产批创建事物处理 --created by jenrry DECLARE p_mmti_rec mtl_transactions_interface%ROWTYPE; p_mmli_tbl gm ...
- Quick and Easy Installation of Oracle Database 12c on Oracle Linux in Oracle VM VirtualBox
发贴人 Sergio-Oracle 于2018-4-18 23:10:15在Oracle Linux Introduction How Does This Work? Requirements Bef ...
- .Net 环境
更多系统版本下载:https://www.microsoft.com/net/download VSCode :https://code.visualstudio.com/
- 在Ubuntu17.04中遇到无法清空回收站解决方法
在Ubuntu17.04下,遇到清空回收站文件时报错,提示”Failed to delete the item from the trash”,无法清空回收站. 回收站其实就是一个文件夹,存放着被删掉 ...
- chrome浏览器访问Google的插件“谷歌访问插件”以及常用插件
1.解决新版谷歌浏览器无法从该网站添加应用.拓展程序和用户脚本 1.在Google Chrome浏览器的桌面快捷方式上鼠标右键,选择属性(R). 2. 在目标(T)后添加参数 --enable-e ...
- SQLServer 删除表中的重复数据
create table Student( ID varchar(10) not null, Name varchar(10) not null, ); insert in ...
- Android友盟推送
当前版本号:v3.0.5 1.下载SDK解压并导入(import module,compile project(':PushSDK')),里面有demo,用demo的包名去官网添加一个应用,然后替换d ...
- python requests 简单实现易班登录,自动点赞,评论,发表
小编能力有限,本文纯属瞎编,如有雷同,你去打辅导员涩 一.前戏 有个操蛋,操蛋,操蛋的辅导员促使小编成长,原因:易班需要活跃度,辅导员安排班上每个人必须去易班上 写文章,写评论,发投票... 我觉得 ...