在之前的項目中,我們使用物理刪除的方式處理不需要的數據,這導致數據永久丟失,無法恢復,也無法追蹤數據的變化歷史。這在需要進行數據審計或數據恢復的場景下,帶來了很大的不便。 為了解決這個問題,我們需要一種“軟刪除”機制,即不物理刪除數據,而是標記數據為已刪除,以便日后恢復。
起初,我們嘗試自行實現軟刪除功能,需要修改模型、數據庫表結構以及相關的查詢方法,工作量很大,而且容易出錯。 這時,我發現了 yiithings/yii2-softdelete 這個 composer 包。它提供了一種簡潔而高效的軟刪除解決方案,省去了大量的重復工作。
安裝過程非常簡單,只需要使用 Composer 命令:
composer require yiithings/yii2-softdelete "*"
安裝完成后,我們需要在模型中使用該擴展。 首先,在你的模型類中引入必要的類:
use yiithingssoftdeletebehaviorsSoftDeleteBehavior;use yiithingssoftdeleteSoftDelete;class MyModel extends yiidbActiveRecord{ use SoftDelete; public function behaviors() { return [ 'softDeleteBehavior' => [ 'class' => SoftDeleteBehavior::className(), ], ]; }}
記住要修改數據庫表結構,添加一個 deleted_at (int(11)) 字段并將其添加到唯一索引中。
接下來,就可以使用 softDelete() 方法進行軟刪除,使用 forceDelete() 方法進行物理刪除,使用 restore() 方法恢復數據。 該擴展還提供了 findWithTrashed(), findOnlyTrashed() 等方法,方便我們查詢所有數據、只查詢已刪除數據或只查詢未刪除數據。 這極大地簡化了代碼,提高了開發效率。
例如,要刪除一條記錄,只需要調用:
$model = MyModel::findOne(1);$model->softDelete();
要恢復一條記錄,只需要調用:
$model = MyModel::findOneWithTrashed(1); //查找已刪除的記錄$model->restore();
yiithings/yii2-softdelete 提供了簡潔的 API,并與 Yii2 的 Active Record 框架無縫集成,使得軟刪除功能的實現變得非常簡單。 它不僅避免了數據永久丟失,也方便了數據的管理和審計。 通過使用這個擴展,我們有效地避免了數據庫臟數據的產生,保證了數據的完整性和一致性。 相比于自己動手實現軟刪除,這個擴展節省了大量的時間和精力,并且代碼更加簡潔易懂。 強烈推薦給所有使用 Yii2 框架的開發者! 如果你想了解更多關于 Composer 的知識,可以參考這個 Composer 在線學習地址:學習地址 它能幫助你更好地理解和使用 Composer 來管理你的項目依賴。