2017 © Pedro Peláez
 

library laravel-expirable

Laravel 5.0+ package to add expirable trait to eloquent models

image

yarob/laravel-expirable

Laravel 5.0+ package to add expirable trait to eloquent models

  • Saturday, March 25, 2017
  • by yarob
  • Repository
  • 1 Watchers
  • 1 Stars
  • 90 Installations
  • PHP
  • 0 Dependents
  • 0 Suggesters
  • 0 Forks
  • 0 Open issues
  • 3 Versions
  • 718 % Grown

The README.md

Laravel Expirable

Add expiring feature to Eloquent models in Laravel 5., (*1)

Background

This has been developed to simplify adding expirable feature to any eloquent model on your laravel project., (*2)

Installation

To install the package via Composer:, (*3)

$ composer require yarob/laravel-expirable

Then, update config/app.php by adding an entry for the service provider., (*4)

'providers' => [
    // ...
    Yarob\LaravelExpirable\ServiceProvider::class,
];

Finally, via terminal, publish the default configuration file (if you need to, see below):, (*5)

php artisan vendor:publish --provider="Yarob\LaravelExpirable\ServiceProvider"

Updating your Eloquent Models

Your models can now use the Expirable trait. You must also add expire_at to your $dates array in the model as shown in the example below, (*6)

use Yarob\LaravelExpirable\Expirable;

class User extends Model
{
    use Expirable;

    /**
     * The attributes that should be mutated to dates.
     *
     * @var array
     */
    protected $dates = [
        'expire_at'
    ];

}

Migration

Your model MUST have column named expire_at in the database to store the expiry date value. You can add this manually via a migration on the intended model $table->timestamp('expire_at')->nullable();., (*7)

Usage

There are three basic functions in Expirable trait: * hasExpired() to check if model has expired or not returns boolean * timeToLive() returns number of seconds left on models life, could be minus if has expired already! returns false if not applicable. * reviveExpired($numberOfSeconds=null) if model has expired you can then revive it by using this function and supplying $numberOfSeconds revival period starting from now(). If $numberOfSeconds is not supplied then will default back to the value set in expirable.php in config folder, if set! Otherwise it will not do anything and returns false. * Model has null expiry date means a non-expirable model and lives forever, e.g. $user->expire_at = null;, (*8)

Example:-, (*9)

$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());  
        }
    }

Querying Expirable Models

Expired models (passed it’s expiry date) will automatically be excluded from query results. For example:-, (*10)

 $users = App\User::get();

will only gets models that has NOT expired or has null expiry date. Any expired models WILL be auto-excluded., (*11)

Including expired Models

You can force expired models to appear in query results using withHasExpiry, (*12)

$users = App\User::withHasExpiry()->get();

Retrieving Only Expired Models

The onlyHasExpiry method can be used on a relationship query:, (*13)

$users = App\User::onlyHasExpiry()->get();

This will exclude ONLY null expiry date from results. Please note this will get ALL models that have non null expiry date, regradless of their expiry date., (*14)

Retrieving Models has null expiry

The withoutHasExpiry method can be used in this case:, (*15)

$users = App\User::withoutHasExpiry()->get();

This will bring models that has null expiry date., (*16)

Configuration

Configuration is not usually needed, unless you want to set a default revival time to a model(s). A default value of 86400 seconds is set for user model, as an example, but feel free to change that to any value you want. Here is an example configuration:, (*17)

return [

    /**
     * Revival Time in seconds used to extend life in expired models
     */

    'User' => [
        'revival_time' => 24*60*60,
    ]
];

Pay attention that Model name in expirable.php is case sensitive! so if you have a foo Model, then, (*18)

return [
    'foo' => [
            'revival_time' => 24*60*60,
        ],
];

laravel-expirable was written by Yarob Al-Taay and is released under the MIT License., (*19)

Copyright (c) 2017 Yarob Al-Taay, (*20)

The Versions

25/03 2017

dev-master

9999999-dev

Laravel 5.0+ package to add expirable trait to eloquent models

  Sources   Download

MIT

The Requires

 

by Yarob Al-Taay

25/03 2017

v1.0.1

1.0.1.0

Laravel 5.0+ package to add expirable trait to eloquent models

  Sources   Download

MIT

The Requires

 

by Yarob Al-Taay

09/03 2017

v1.0.0

1.0.0.0

Laravel 5.0+ package to add expirable trait to eloquent models

  Sources   Download

MIT

The Requires

 

by Yarob Al-Taay