ThinkPHP5的软删除的常见问题和详解
来源:互联网 发布:淘宝店铺优惠卷图片 编辑:程序博客网 时间:2024/06/05 17:45
tp5的软删除:
1、 使用:官方文档
use traits\model\SoftDelete;class User extends Model{use SoftDelete;protected $deleteTime = 'delete_time';//必须protected $updateTime = false;//必须}
在这里官方文档说的不是很清楚,首先变量deleteTime是变量不影响(随便命名,但是一般不会更改),而字符串delete_time是数据库中的字段,也就是根据自己的需要设置的软删除标识字段。比如我的数据库的标识字段是‘recycle’.
所以:
$deleteTime = 'recycle';
这里的deleteTime是默认的删除标识字段,所以如果你的字段不是delete_time需要赋值给变量(自己定义标识字段),而数据类型为时间戳(timestamp),默认值是null。
而变量updateTime是false是为了关闭数据库更新操作的记录。这是tp框架的自带功能,默认是开启的。如果你的数据库中没有并且不打算做更新操作时记录更新时间的话可以选择关闭,赋值为false。如果不关闭而没有字段会报错“数据库中update_time字段不存在”。也就是说变量$updateTime是必须的,要么赋值false,关闭;要么赋值为你数据库中对应的字段。比如你数据库中有update_time字段用于记录更新时间,那么赋值为update_time.
protected $updateTime = 'update_time';//或者protected $updateTime = false;
这里的updateTime 是默认的更新、插入操作的记录字段,所以如果你的字段不是delete_time需要赋值给变量(自己定义标识字段),而数据类型为时间戳(timestamp),默认值是null。
以上2处数据库类型都是时间戳是tp框架的强制规定,也是为了方便存储和读取
配置文件:
在database.php中设置自动写入时间戳为true,默认是false。这里就可以和前面的时间戳数据类型对应。
// 自动写入时间戳字段 'auto_timestamp' => true,
2、 CURD操作。
软删除
withTrashed()//不管是不是在回收站中都遍历
onlyTrashed()//只遍历在回收站中的数据
而正常写的函数方法都只是在没有在回收站的数据中进行。
3、数据恢复
目前已知的只有一种方法,写原生sql语句。
$sql = ' update tablename set delete_time = NULL where id ='恢复的数据id' ' ;//delete_time是数据库中自定义的删除标识字段。Db::excute($sql );
软删除的原理就是根据标识字段的值来判断数据是否是被删除了而NULL是唯一作为数据没有被执行删除操作的标识,也就是说删除标识的列的值是NULL的数据是正常数据,只要不是NULL就是已进行过删除操作的数据,被放入的回收站。需要withTrashed或者onlyTrashed才能操作这些数据
所以根据以上得出一个不幸的结论,与其用框架自带的软删除功能,还不如自己写一个原生的软删除功能。只需要我门定义一个列列作为删除标识,当这个列的值为某个数字(或者某个字符)时就认为它是被进行过了删除操作,它被放入了回收站中,而其他的数据时则说明它没有在回收站中,在数据操作时添加一个where条件对数据进行一次筛选就能轻松搞定软删除的功能,而且使用起来还更为灵活。
当数据恢复时,也可以通过更新操作快速的执行,通过以上的对比,tp框架的软删除功能并没有我们想的那么高效和便捷。
- ThinkPHP5的软删除的常见问题和详解
- ThinkPHP5.0的软删除功能
- thinkphp5.0的命名空间详解
- Nginx下ThinkPHP5的配置方法详解
- Thinkphp5 的widget功能使用详解
- thinkphp5的vendor和extend的区别
- thinkPHP5 session和cache的区别问题
- ThinkPHP5的数据库和模型用法
- 关于thinkphp5的上传图片和ckeditor
- Linux系统配置文件的详解和常见问题的解决
- thinkphp5的验证器详解,以及自定义验证器
- thinkphp5的SESSION用法
- ThinkPHP5下的validate
- Thinkphp5 爬过的坑
- thinkPHP5-分页的实现
- ThinkPHP5的安装方式
- thinkphp5的入门学习
- ThinkPHP5的命名规范
- 利用指针及数组对国家名称按字典排序
- 微服务架构的基础框架选择:Spring Cloud还是Dubbo?
- python str内建函数文档
- 利用可变参数模拟实现简易printf
- opencv(30)---特征检测与匹配(1)---SIFT特征点提取
- ThinkPHP5的软删除的常见问题和详解
- View事件冲突- Android
- 用户、群组和权限
- ubuntu上生成pycharm快捷桌面方式的两种常用方法
- 【蓝桥杯】 穿越雷区
- 遗传算法中几种交叉算子小结
- RadioButton
- java泛型
- 数据结构:图