tugapackages/laravel-model-expires

为 Eloquent 模型分配过期日期的软件包

v1.8.2 2022-07-02 20:46 UTC

This package is not auto-updated.

Last update: 2024-09-23 05:23:05 UTC


README

Laravel Model Expires

PHP version Latest Version on Packagist Software License Tests Code style Total Downloads

为 Eloquent 模型分配过期日期

安装

您可以通过 composer 安装此软件包

composer require mvdnbrk/laravel-model-expires

使用方法

要在模型上使用过期日期,请使用 Expirable 特性

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Mvdnbrk\EloquentExpirable\Expirable;

class Subscription extends Model
{
    use Expirable;
}

您应该在数据库表中添加一个 expires_at 列。
此软件包包含一个辅助方法来创建此列

class CreateSubscriptionsTable extends Migration
{
    public function up(): void
    {
        Schema::create('subscriptions', function (Blueprint $table) {
            $table->expires();
        });
    }

    public function down(): void
    {
        Schema::dropExpires();
    }
}

Expirable 特性将自动将 expires_at 属性转换为 DateTime / Carbon 实例。

自定义列名

您可以通过设置 EXIRES_AT 常量或覆盖模型上的 getExpiresAtColumn 方法来自定义列名。

class Subscription extends Model
{
    use Expirable;

    const EXPIRES_AT = 'ends_at';
}
$table->expires('ends_at');
$table->dropExpires('ends_at);

设置过期

您可以通过设置具有 TTL(以秒为单位)的 expires_at 属性来设置模型的过期时间

$subscription->expires_at = 600;

您也可以传递一个表示过期日期的 DateTime 实例,而不是传递整数表示的秒数

$subscription->expires_at = now()->addMinutes(10);

丢弃过期

您可以通过设置负数或零 TTL 或使用 discardExpiration 方法来丢弃模型的过期时间

$subscription->expires_at = 0;
$subscription->expires_at = -5;

$subscription->discardExpiration()->save();

确定过期

要确定给定的模型实例是否已过期,请使用 expired 方法

if ($subscription->expired()) {
    //
}

要确定给定的模型是否将在未来过期,请使用 willExpire 方法

if ($subscription->willExpire()) {
    //
}

查询模型

withoutExpired 方法将检索未过期的模型

$subscriptions = App\Models\Subscription::withoutExpired()->get();

onlyExpired 方法将检索 过期的模型

$subscriptions = App\Models\Subscription::onlyExpired()->get();

expiring 方法将检索 将来过期的模型

$subscriptions = App\Models\Subscription::expiring()->get();

notExpiring 方法将检索 不会过期的模型

$subscriptions = App\Models\Subscription::notExpiring()->get();

待办事项

  • 添加一个 expired:prune 控制台命令来删除过期的模型,或者执行自定义实现。
  • 添加一个查询作用域,该作用域将查询将在 ... 过期的模型

测试

composer test

变更日志

有关最近更改的更多信息,请参阅 CHANGELOG

贡献

有关详细信息,请参阅 CONTRIBUTING

安全漏洞

有关如何报告安全漏洞的详细信息,请参阅 我们的安全策略

鸣谢

许可证

MIT 许可证(MIT)。有关更多信息,请参阅 许可证文件