ThinkPHP5.0的軟刪除功能
阿新 • • 發佈:2019-02-02
閱讀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']);
}
}