PHP 資料軟刪除

2021-10-23 20:38:12 字數 1521 閱讀 1392

建議

1,需要匯入 use traits\model\softdelete;

2,在內部組合使用 use softdelete;

3,指定資料庫軟刪除的標記字段 protected $deletetime = 'delete_time';

4,(可選引數)指定標記欄位的預設值 5.1 版本以上才有效 protected $defaultsoftdelete = 0;

use think\model;

use traits\model\softdelete;

class user extends model

// 軟刪除   根據主鍵

user::destroy(1);

// 真實刪除

user::destroy(1,true);

$user = user::get(1); ## 此處需要主要,如果是先使用模型查出資料再刪除的話是軟刪除,若直接使用 delete 方法,則是真實刪除,因為 thinkphp 由模型直接呼叫 delete 方法走的是資料庫的 delete 方法

// 軟刪除

$user->delete();

// 真實刪除

$user->delete(true);

預設情況下查詢的資料不包含軟刪除資料,如果需要包含軟刪除的資料,可以使用下面的方式查詢:

user::withtrashed()->find();

user::withtrashed()->select();

如果僅僅需要查詢軟刪除的資料,可以使用:

user::onlytrashed()->find();

user::onlytrashed()->select();

注:軟刪除僅對模型的刪除方法有效,如果直接使用資料庫的刪除方法則無效,例如下面的方式無效(將不會執行任何操作)。

user::where('id',1)->delete();    ### 因為此方法是直接呼叫的 資料庫的 delete 方法,所以無法達到軟刪除的效果
根據 where 條件進行軟刪除
1, 通過 destroy 方式的閉包函式實現

$data = newamodel::destroy(function($query) use ($key));

通過上面方式可以對 newamodel 模型資料進行 where 條件軟刪除

2,通過先獲取,再刪除實現軟刪除

$newamodel = newamodel::where('key',$key);

$newamodel->delete();

3, 通過 destroy 的陣列方式實現 where 條件的軟刪除

$data = newamodel::destroy(['key'=>$key]);

自己封裝軟刪除方法,不要使用這個

原因:無論是否成功刪除資料,都是返回布林值 true

無法判斷是否成功刪除資料

軟刪除和刪除

最近學習mvc的時候,遇到了乙個詞 軟刪除 然後就學習了一下。軟刪除又叫邏輯刪除或標記刪除。與我們常說的刪除不一樣,並不是真正從資料庫中將該條記錄刪除,而是會設定乙個字段,比如 isdelete來標記刪除狀態。其實,在實際情況中,很多時候我們說的 刪除 並不是真的 刪除 比如 1 購物車的訂單不是被...

mysql軟刪除與硬刪除 軟刪除和硬刪除的處理方法

硬刪除 硬刪除就是傳統的物理刪除,直接將該記錄從資料庫中刪除。但是是人總會犯錯誤,在誤操作刪除了重要資料後,如果想要恢復該資料,需要鎖表再去訪問日誌檔案。這樣會造成大量的人力資源浪費,現在的開發不推介這種方式。軟刪除軟刪除又叫邏輯刪除,標記刪除,與我們常說的刪除不同,並不是真的從資料庫中將這條記錄去...

mysql軟刪除與硬刪除 軟刪除和硬刪除的處理方法

硬刪除 硬刪除就是傳統的物理刪除,直接將該記錄從資料庫中刪除。但是是人總會犯錯誤,在誤操作刪除了重要資料後,如果想要恢復該資料,需要鎖表再去訪問日誌檔案。這樣會造成大量的人力資源浪費,現在的開發不推介這種方式。軟刪除軟刪除又叫邏輯刪除,標記刪除,與我們常說的刪除不同,並不是真的從資料庫中將這條記錄去...