1. 程式人生 > >ThinkPHP5.0的軟刪除功能

ThinkPHP5.0的軟刪除功能

閱讀TP的手冊實在是有些困難,所以儘量自己試一下,閱讀一下框架的原始碼,才能搞清楚

關於軟刪除,手冊的介紹是這樣的

在實際專案中,對資料頻繁使用刪除操作會導致效能問題,軟刪除的作用就是把資料加上刪除標記,而不是真正的刪除,同時也便於需要的時候進行資料的恢復。

要使用軟刪除功能,需要引入SoftDelete trait
我新建了一個表my_admin,下面是對應的model
<?php
    namespace app\common\model;

    use think\Model;
    use traits\model\SoftDelete;

    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 app\admin\controller;
    use app\common\model\Admin;

    class Index extends Base {

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

這種刪除方法其實就是將delete_time欄位寫入當前的刪除時間,此記錄並沒有真正刪除

但是在定義了軟刪除之後,以下的刪除方式還是將記錄真正刪除了

<?php
    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

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

    }

2、查詢

<?php
    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

        public function index() {

            //查詢沒有被軟刪除的記錄
            Admin::select();

            //只查詢被軟刪除的記錄
            Admin::onlyTrashed()->select();

            //包含已經被軟刪除的記錄
            Admin::withTrashed()->select();
        }

    }
3、恢復被軟刪除的記錄

retore中的引數是where陣列

<?php
    namespace app\admin\controller;

    use app\common\model\Admin;

    class Index extends Base {

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

    }