roberthucks / selfdestruct
一个用于让 Laravel 模型在指定时间后自动删除的包。
This package is auto-updated.
Last update: 2021-06-15 21:31:30 UTC
README
此包旨在创建一种可重复的方式,让模型在指定时间后自行删除。目前,该包相对简单,但可以进行扩展,以允许更深入的定制,并能够设置每条记录的过期时间,而不是仅限于每个模型。
包内包含内容
这可以用于 Model
,使其在指定时间后能够删除。
用于管理 Model
销毁的表。
工作原理
该包通过在 Model
上使用提供的 Trait
并将其钩入到 created
事件来实现。当创建一个 Model
时,它会将 created_at
和 life_time
的总和存储在单独的表中。然后,每分钟检查该表以查找过期的记录,并删除每个 Model
。
如何使用
- 将包添加到您的项目中。
composer require roberthucks/selfdestruct
- 运行迁移以创建表
php artisan migrate
- 配置模型
第一步是将 Trait
添加到 Model
中。添加 use RobertHucks\SelfDestruct\Traits\SelfDestruct;
,然后在 Model
类中使用它,如下所示 use SelfDestruct;
添加到您的 Model
后,您需要添加一个名为 $life_time
的属性。这是 Model
应该存活的时间(秒数)。
下面是修改后的 Model
的样子
<?php namespace App; use Illuminate\Database\Eloquent\Model; use Illuminate\Database\Eloquent\SoftDeletes; use RobertHucks\SelfDestruct\Traits\SelfDestruct; class Post extends Model { use SoftDeletes; use SelfDestruct; protected $table = 'post'; protected $fillable = [ 'title', 'body' ]; protected $dates = ['deleted_at']; protected $life_time = 60; }
- 设置 Laravel 的调度器
此包需要使用 任务调度器。您应该确保它在您的系统上配置正确并且正在运行,否则此包将不会做任何事情。
* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1
注意事项
此包依赖于在您的 Model
上有 created_at
字段。在未来,这将是一个可配置的字段,甚至可能仅使用当前时间而取消,但现在,这是 Model
的一个要求。
另一件需要注意的事情是,清除过期的 Model
的 Task
每分钟运行一次。这意味着删除几乎永远不会在确切的到期时间发生。如果有其他方式执行此操作,我很乐意听取,但这并不是我的用例中的问题,因此这是一个我乐于接受的限制。