roberthucks/selfdestruct

该包已被弃用且不再维护。未建议替代包。

一个用于让 Laravel 模型在指定时间后自动删除的包。

v1.3 2019-01-15 14:39 UTC

This package is auto-updated.

Last update: 2021-06-15 21:31:30 UTC


README

此包旨在创建一种可重复的方式,让模型在指定时间后自行删除。目前,该包相对简单,但可以进行扩展,以允许更深入的定制,并能够设置每条记录的过期时间,而不是仅限于每个模型。

包内包含内容

这可以用于 Model,使其在指定时间后能够删除。

用于管理 Model 销毁的表。

工作原理

该包通过在 Model 上使用提供的 Trait 并将其钩入到 created 事件来实现。当创建一个 Model 时,它会将 created_atlife_time 的总和存储在单独的表中。然后,每分钟检查该表以查找过期的记录,并删除每个 Model

如何使用

  1. 将包添加到您的项目中。
composer require roberthucks/selfdestruct
  1. 运行迁移以创建表
php artisan migrate
  1. 配置模型

第一步是将 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;
}
  1. 设置 Laravel 的调度器

此包需要使用 任务调度器。您应该确保它在您的系统上配置正确并且正在运行,否则此包将不会做任何事情。

* * * * * cd /path-to-your-project && php artisan schedule:run >> /dev/null 2>&1

注意事项

此包依赖于在您的 Model 上有 created_at 字段。在未来,这将是一个可配置的字段,甚至可能仅使用当前时间而取消,但现在,这是 Model 的一个要求。

另一件需要注意的事情是,清除过期的 ModelTask 每分钟运行一次。这意味着删除几乎永远不会在确切的到期时间发生。如果有其他方式执行此操作,我很乐意听取,但这并不是我的用例中的问题,因此这是一个我乐于接受的限制。