yarob/laravel-expirable

Laravel 5.0+ 包,用于为 Eloquent 模型添加可过期特性

v1.0.1 2017-03-25 18:31 UTC

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() 检查模型是否已过期,返回 boolean
  • timeToLive() 返回模型生命周期的剩余秒数,如果已过期则可能是负数!如果不适用于此,则返回 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-expirableYarob Al-Taay 编写,并发布在 MIT 许可证 下。

版权(c)2017 Yarob Al-Taay