zoukankan      html  css  js  c++  java
  • 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基础查询,请确保添加软删除的基础查询条件

  • 相关阅读:
    css盒模型不同浏览器下解释不同 解决办法
    【META http-equiv="Content-Type" Content="text/html; Charset=*】意义详解
    淘宝2015年秋招在线笔试题
    mouseleave mouseout时候悬浮框不应该消失的时候消失了 css 解决办法
    ACM知识点分类
    2019牛客多校第九场 B.Quadratic equation
    扫描线算法
    可持久化数据结构(模板)
    luogu SP3267 DQUERY
    luogu2633 Count on a tree(树上LCA+主席树求区间第k小)
  • 原文地址:https://www.cnblogs.com/bushui/p/12126399.html
Copyright © 2011-2022 走看看