createnl/expires

Set expiration date for database records, like future deleted at columns

0.3 2017-08-03 09:04 UTC

This package is not auto-updated.

Last update: 2024-04-13 07:12:27 UTC


README

Latest Version on Packagist Software License Build Status Coverage Status Quality Score Total Downloads

A package to add expiration date to database records.

Install

Via Composer

$ composer require createnl/expires

Usage

Your migration

$table->dateTime('expires_at')->nullable()->default(null);

Your model

class Model extends Eloquent
{
    use Createnl\Expires\Expirable
    
    /**
     * Indicates if the model should set an auto expire
     *
     * @var bool
     */
    protected static $autoExpire = true;
     
    /**
     * Indicates if the model should reset the expiration date on model update
     *
     * @var bool
     */
    protected static $autoExtend = true;
    
    /**
     * The amount of interval to be added to the
     * Please see ISO_8601 durations for correct markups
     *
     * @var string (\DateInterval)
     */
    protected static $autoExpireDate = 'P5Y';
}

Methods

// Get records with expired
$model->withExpired() : Builder;
 
// Get only expired records
$model->onlyExpired() : Builder;
 
// Update expiration date
$model->setExpiration(Carbon $date) : Model;
 
// Remove expiration date
$model->unExpire() : Model;
 
// Check if record is expired
$model->isExpired() : bool;
 
// Get carbon object of expiration date
$model->expiresAt() :? Carbon;
 
// Extend expiration by defined interval
$model->extendExpiration() : Model;
 
// Disable automatic setting of expiration date
Model::disableExpiring() : void;
 
// Enable automatic setting of expiration date
Model::enableExpiring() : void;

Custom expiration date logic

/**
 * @override
 * Get Carbon object of parsed expiration date.
 *
 * @return Carbon
 */
public function expirationDate() : Carbon
{
    // @todo: Manipulate expiration date
    $interval = new \DateInterval(self::$autoExpireDate);
    return $this->freshTimestamp()->add($interval);
}

Change log

Please see CHANGELOG for more information on what has changed recently.

Testing

$ composer test

Contributing

Please see CONTRIBUTING and CONDUCT for details.

Security

If you discover any security related issues, please email alex@create.nl instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.