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 每分钟运行一次。这意味着删除几乎永远不会在确切的到期时间发生。如果有其他方式执行此操作,我很乐意听取,但这并不是我的用例中的问题,因此这是一个我乐于接受的限制。