• Thinkph5——模型软删除


    在实际项目中,对数据频繁使用删除操作会导致性能问题,软删除的作用就是把数据加上删除标记,而不是真正的删除,同时也便于需要的时候进行数据的恢复。

    第一步:在数据库添加字段“delete_time”

    字段类型可以是datetime,也可以是int(版本Tp5.0最好使用int);同时它的默认值必须为null

    注意:版本为Thinkph5,数据库字段“delete_time”类型最好int;如果类型是datetime,它的值就变成了"0000-00-00 00:00:00"。Thinkphp5.1没有这个问题,这应该是版本的问题。

    第二步:要使用软删除功能,需要引入SoftDelete

    <?php
    namespace appindexmodel;
    use thinkModel;
    use traitsmodelSoftDelete;
    
    class Shopping extends Model     //购物车
    {
        use SoftDelete;
        protected $deleteTime = 'delete_time';
    }

    我们在调用模型查询,它自动加上where把已经软删除的过滤掉

    第三步:使用软删除

    //软删除
    Shopping::destroy(1);//这里输入值它的id;成功就返回1
    //真实删除
    Shopping::destroy(1,true);
    $shopping = Shopping::get(1); //软删除 $shopping->delete(); //真实删除 $shopping->delete(true);

    如果你想自己写,使用useSoftDelete给delete_time赋值

    //使用useSoftDelete给的delete_time赋值
    Shopping::whereIn('id',[10,12])->useSoftDelete('delete_time', date("Y-m-d H:i:s",time()))->delete();

    默认情况下查询的数据不包含软删除数据,如果需要包含软删除的数据,可以使用下面的方式查询:

    Shopping::withTrashed()->find();
    Shopping::withTrashed()->select();//查询全部数据,包括软删除

    如果仅仅需要查询软删除的数据,可以使用:

    Shopping::onlyTrashed()->find();
    Shopping::onlyTrashed()->select();

    回复软删除数据:

    //获取已经被软删除的数据
    $del = Shopping::onlyTrashed()->where(['id'=>1,'name'=>"lhs"])->find();
    //回复软删除
    $del->restore();

    注意:如果你的模型定义了base基础查询,请确保添加软删除的基础查询条件

  • 相关阅读:
    MYSQL GDB 崩溃调试
    MYSQL GDB SHELL
    OOW 2015 MYSQL
    DTCC:MySQl核心代码开发经验揭示
    东东糖博客MYSQL
    perf 函数调用性能(函数流程图)
    Percona-Toolkit学习之安装和配置
    Upgrading Directly from MySQL 5.0 to 5.7 using an ‘In Place’ Upgrade
    在线遥感影像与地图集数据下载搜集
    墨卡托投影、高斯-克吕格投影、UTM投影及我国分带方法
  • 原文地址:https://www.cnblogs.com/bushui/p/12126399.html
Copyright © 2020-2023  润新知