Laravel 軟刪除模型指南

hmingv發表於2022-01-04

應用程式中使用者犯錯並意外刪除資料是很常見的,即使在他們刪除資料之前向他們顯示了數次警告。此時需要引入資料恢復的功能,以便於在刪除後恢復,並在一定時間後永久刪除該資料。

軟刪除

如果希望在使用者刪除其賬戶後保留一段時間,以便於恢復它。需要建立一個新的遷移檔案向 User 模型新增軟刪除。

/**
* Run the migrations.
*
* @return void
*/
public function up()
{
    Schema::table('users', function (Blueprint $table) {
        $table->softDeletes();
    });
}
新增 traitSoftDeletes
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, SoftDeletes;
    // ...
}

到此,軟刪除已經正常工作了。當使用者刪除賬戶時,應用程式不會直接刪除該記錄,而只是設定刪除時間。
永久刪除使用者和恢復使用者的方法參考軟刪除文件

定時清理資料

如果想要定期清理資料庫並自動刪除軟刪除模型,這稱為 修剪。與在 Laravel 中向模型新增軟刪除類似,可以使用 Prunable 特性和在模型中實現 prunable 方法,該方法告訴 Laravel 何時刪除軟刪除模型。

新增 traitPrunable
class User extends Authenticatable
{
    use HasApiTokens, HasFactory, Notifiable, SoftDeletes, Prunable;
    // ...
}

這個 trait 告訴 Laravel,當排程程式執行時,它應該在這個模型中尋找 prunable 方法

一個好的做法是一週後刪除使用者,這樣即使您的支援佇列已滿,您也可以選擇恢復它們,同時也給他們一個合理的時間,知道他們的資料從系統中擦除。

新增 prunable 方法
public function prunable()
{
  return static::where('deleted_at', '<=', now()->subWeek());
}

設定完成後,可以透過將命令新增到控制檯核心來安排命令每天修剪模型:

$schedule->command('model:prune')->daily();
本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章