什么是软删除

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

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

牵涉到Yii2的中的操作

引入SoftDeleteBehavior文件

  1. <?php
  2.  
  3. namespace common\behavior;
  4.  
  5. use yii\base\Behavior;
  6. use yii\base\Event;
  7. use yii\db\ActiveRecord;
  8.  
  9. class SoftDeleteBehavior extends Behavior
  10. {
  11. /**
  12. * @var string delete time attribute
  13. */
  14. public $timeAttribute = false;
  15. /**
  16. * @var string status attribute
  17. */
  18. public $statusAttribute = "is_deleted";
  19. /**
  20. * @var string deleted status attribute
  21. */
  22. public $deletedValue = 1;
  23.  
  24. /**
  25. * @var string active status attribute
  26. */
  27. public $activeValue = 0;
  28.  
  29. /**
  30. * @inheritdoc
  31. */
  32. public function events() {
  33. return [
  34. ActiveRecord::EVENT_BEFORE_DELETE => 'softDelete',
  35. ];
  36. }
  37. /**
  38. * Set the attribute deleted
  39. *
  40. * @param Event $event
  41. */
  42. public function softDelete($event) {
  43. $attributes[1] = $this->statusAttribute;
  44. $_attribute = $attributes[1];
  45. if($this->timeAttribute) {
  46. $this->owner->$_attribute = time();
  47. } else {
  48. $this->owner->$attributes[1] = $this->deletedValue;
  49. }
  50. // save record
  51. $this->owner->save(false, $attributes);
  52. //prevent real delete
  53. $event->isValid = false;
  54. }
  55. /**
  56. * Restore soft-deleted record
  57. */
  58. public function restore() {
  59. $attributes[1] = $this->statusAttribute;
  60. $this->owner->$attributes[1] = $this->activeValue;
  61. // save record
  62. $this->owner->save(false, $attributes);
  63. }
  64. /**
  65. * Force delete from database
  66. */
  67. public function forceDelete() {
  68. // store model so that we can detach the behavior and delete as normal
  69. $model = $this->owner;
  70. $this->detach();
  71. $model->delete();
  72. }
  73. }

在需要使用的Model中

  1. use common\behavior\SoftDeleteBehavior;
  2. // ...
  3. public function behaviors() {
  4. return [
  5. 'softDelete' => ['class' => SoftDeleteBehavior::className(),
  6. 'timeAttribute' => true,
  7. 'statusAttribute' => 'deletedAt',
  8. ],
  9. ];
  10. }

Controler中不用改

  1. public function actionDelete($id)
  2. {
  3. $this->findModel($id)->delete();
  4.  
  5. return $this->redirect(['index']);
  6. }

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

执行 $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. 国内使用kubeadm部署kubernetes的完整流程

    使用阿里云的镜像安装kubeadm和kubectl cat <<EOF > /etc/yum.repos.d/kubernetes.repo [kubernetes] name=Ku ...

  2. LeetCode题解之Split Linked List in Parts

    1.题目描述 2.题目分析 主要是理解题意,将每个子链表应该分得的节点个数计算清楚.利用除数和余数的方法进行计算. 3.代码 vector<ListNode*> splitListToPa ...

  3. Android Studio之could not reserve enough space for object heap报错

    在用AndroidStudio时出现这样的错误:  搞了半天终于找到了解决办法,但是很麻烦.就是每次创建工程后,在gradle.properties文件中加入如下代码: org.gradle.jvma ...

  4. 从 Azure 下载 Windows VHD

    本文介绍如何使用 Azure 门户从 Azure 下载 Windows 虚拟硬盘 (VHD) 文件. Azure 中的虚拟机 (VM) 将磁盘用作存储操作系统.应用程序和数据的位置. 所有 Azure ...

  5. Solving the SQL Server Multiple Cascade Path Issue with a Trigger (转载)

    Problem I am trying to use the ON DELETE CASCADE option when creating a foreign key on my database, ...

  6. linux开机步骤

    linux开机启动步骤: 1.bios自检 2.MBR引导 3.引导系统,进入grub菜单 4.加载内核kernel 5.运行第一个进程init 6.读取/etc/inittab 读取运行级别 7.读 ...

  7. Springboot系列:Springboot与Thymeleaf模板引擎整合基础教程(附源码)

    前言 由于在开发My Blog项目时使用了大量的技术整合,针对于部分框架的使用和整合的流程没有做详细的介绍和记录,导致有些朋友用起来有些吃力,因此打算在接下来的时间里做一些基础整合的介绍,当然,可能也 ...

  8. OpenResty 安装配置

    0. 说明 1. Windows 下安装 下载软件包 openresty-1.13.6.1-win32.zip ,解压即可食用. [开启] 直接运行 nginx.exe 在 Windows 的命令窗口 ...

  9. 数值分析 最小二乘 matlab

    1. 已知函数在下列各点的值为   -1 -0.75 -0.5 0 0.25 0.5 0.75   1.00 0.8125 0.75 1.00 1.3125 1.75 2.3125 分别用一次.二次. ...

  10. 1)HDFS分布式文件系统 2)HDFS核心设计 3 )HDFS体系结构

    一.HDFS简介 1.HDFS:Hadoop distributed file system 一个分布式文件系统 基于流数据模式访问和处理超大文件的需要而开发 适合应用在大规模数据集上 2. 优点 处 ...