Laravel 软删除模型指南
应用程序中用户犯错并意外删除数据是很常见的,即使在他们删除数据之前向他们显示了数次警告。此时需要引入数据恢复的功能,以便于在删除后恢复,并在一定时间后永久删除该数据。
软删除
如果希望在用户删除其账户后保留一段时间,以便于恢复它。需要创建一个新的迁移文件向
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 协议》,转载必须注明作者和本文链接
谢谢分享,get 新知识点 Prunable
学习了。优雅,脏数据都安排得明明白白。