yarob / laravel-expirable
Laravel 5.0+ 包,用于为 Eloquent 模型添加可过期特性
Requires
- php: >=5.6.4
- nesbot/carbon: 1.*
This package is not auto-updated.
Last update: 2024-09-29 02:28:59 UTC
README
为 Laravel 5 的 Eloquent 模型添加过期功能。
背景
此功能是为了简化在 Laravel 项目中的任何 Eloquent 模型上添加 expirable 特性而开发的。
安装
通过 Composer 安装此包
$ composer require yarob/laravel-expirable
然后,通过在 config/app.php 中添加服务提供者条目来更新配置
'providers' => [ // ... Yarob\LaravelExpirable\ServiceProvider::class, ];
最后,通过终端发布默认配置文件(如果需要,请参阅以下内容)
php artisan vendor:publish --provider="Yarob\LaravelExpirable\ServiceProvider"
更新 Eloquent 模型
您的模型现在可以使用 Expirable 特性。您还必须在模型中将 expire_at 添加到 $dates 数组中,如下例所示
use Yarob\LaravelExpirable\Expirable; class User extends Model { use Expirable; /** * The attributes that should be mutated to dates. * * @var array */ protected $dates = [ 'expire_at' ]; }
迁移
您的模型必须在数据库中具有名为 expire_at 的列以存储过期日期值。您可以通过在目标模型上创建迁移来手动添加此列 $table->timestamp('expire_at')->nullable();。
用法
Expirable 特性中有三个基本功能
hasExpired()检查模型是否已过期,返回booleantimeToLive()返回模型生命周期的剩余秒数,如果已过期则可能是负数!如果不适用于此,则返回false。reviveExpired($numberOfSeconds=null)如果模型已过期,则可以使用此函数通过提供$numberOfSeconds指定的复活周期(从now()开始)来复活它。如果未提供$numberOfSeconds,则默认为配置文件夹中expirable.php中设置的值。如果已设置,则不会执行任何操作并返回false。- 模型的过期日期为
null表示非过期模型,将永远存在,例如$user->expire_at = null;
示例:
$user = App\User::get(); foreach($users as $user) { if($user->hasExpired()) { var_dump($user->timeToLive()); $user->reviveExpired(); var_dump($user->timeToLive()); } else { $user->expire_at = \Carbon\Carbon::now()->addDay(-10);// you can add minus values $user->save(); var_dump($user->timeToLive()); } }
查询可过期模型
过期的模型(已超过其过期日期)将自动从查询结果中排除。例如:
$users = App\User::get();
将仅获取尚未过期或具有 null 过期日期的模型。任何已过期的模型都将自动排除。
包含过期模型
您可以使用 withHasExpiry 强制过期模型出现在查询结果中
$users = App\User::withHasExpiry()->get();
检索仅过期模型
可以在关系查询中使用 onlyHasExpiry 方法
$users = App\User::onlyHasExpiry()->get();
这将仅排除 null 过期日期。请注意,这将获取所有具有非 null 过期日期的模型,无论其过期日期如何。
检索具有 null 过期日期的模型
在这种情况下,可以使用 withoutHasExpiry 方法
$users = App\User::withoutHasExpiry()->get();
这将获取具有 null 过期日期的模型。
配置
通常不需要配置,除非您想为模型(s)设置默认的复活时间。例如,为用户模型设置了 86400 秒 的默认值,但您可以根据需要将其更改为任何值。以下是一个配置示例
return [ /** * Revival Time in seconds used to extend life in expired models */ 'User' => [ 'revival_time' => 24*60*60, ] ];
请注意,在 expirable.php 中的模型名称是区分大小写的!因此,如果您有一个 foo 模型,那么
return [ 'foo' => [ 'revival_time' => 24*60*60, ], ];
版权和许可
laravel-expirable 由 Yarob Al-Taay 编写,并发布在 MIT 许可证 下。
版权(c)2017 Yarob Al-Taay