牛骨文教育服务平台(让学习变的简单)
博文笔记

ThinkPHP5.0的软删除功能

创建时间:2017-05-11 投稿人: 浏览次数:1661

阅读TP的手册实在是有些困难,所以尽量自己试一下,阅读一下框架的源码,才能搞清楚


关于软删除,手册的介绍是这样的

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

要使用软删除功能,需要引入SoftDelete trait


我新建了一个表my_admin,下面是对应的model

<?php
    namespace appcommonmodel;

    use thinkModel;
    use traitsmodelSoftDelete;

    class Admin extends Model {
        protected $table = "my_admin";
        protected $deleteTime = "delete_time";

        use  SoftDelete;

    }

$deleteTime 表示你的表中用来标记的删除时间的字段名,注意数据类型为int,而不是手册中的   时间戳类型(我试了一下,如果设置成timestamp,写入的时间是0000-00-00 00:00:00)


1、删除

<?php
    namespace appadmincontroller;
    use appcommonmodelAdmin;

    class Index extends Base {

        public function index() {
            Admin::destroy(1);
            Admin::destroy([1,2,3]);
            Admin::destroy(["status"=>"0"]);
        }
    }

这种删除方法其实就是将delete_time字段写入当前的删除时间,此记录并没有真正删除


但是在定义了软删除之后,以下的删除方式还是将记录真正删除了

<?php
    namespace appadmincontroller;

    use appcommonmodelAdmin;

    class Index extends Base {

        public function index() {
            $admin = new Admin();
            $admin->where("name", "in", ["asd","sss",])->delete();
        }

    }


2、查询

<?php
    namespace appadmincontroller;

    use appcommonmodelAdmin;

    class Index extends Base {

        public function index() {

            //查询没有被软删除的记录
            Admin::select();

            //只查询被软删除的记录
            Admin::onlyTrashed()->select();

            //包含已经被软删除的记录
            Admin::withTrashed()->select();
        }

    }



3、恢复被软删除的记录

retore中的参数是where数组

<?php
    namespace appadmincontroller;

    use appcommonmodelAdmin;

    class Index extends Base {

        public function index() {
            $admin = new Admin();
            $admin->restore(["id" => "14"]);
        }

    }






声明:该文观点仅代表作者本人,牛骨文系教育信息发布平台,牛骨文仅提供信息存储空间服务。