應用程式中使用者犯錯並意外刪除資料是很常見的,即使在他們刪除資料之前向他們顯示了數次警告。此時需要引入資料恢復的功能,以便於在刪除後恢復,並在一定時間後永久刪除該資料。
軟刪除
如果希望在使用者刪除其賬戶後保留一段時間,以便於恢復它。需要建立一個新的遷移檔案向
User
模型新增軟刪除。
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::table('users', function (Blueprint $table) {
$table->softDeletes();
});
}
新增 trait
:SoftDeletes
class User extends Authenticatable
{
use HasApiTokens, HasFactory, Notifiable, SoftDeletes;
// ...
}
到此,軟刪除已經正常工作了。當使用者刪除賬戶時,應用程式不會直接刪除該記錄,而只是設定刪除時間。
永久刪除使用者和恢復使用者的方法參考軟刪除文件
定時清理資料
如果想要定期清理資料庫並自動刪除軟刪除模型,這稱為
修剪
。與在 Laravel 中向模型新增軟刪除類似,可以使用Prunable
特性和在模型中實現prunable
方法,該方法告訴 Laravel 何時刪除軟刪除模型。
新增 trait
:Prunable
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 協議》,轉載必須註明作者和本文連結