PHPackages                             yarob/laravel-expirable - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. yarob/laravel-expirable

ActiveLibrary[Database &amp; ORM](/categories/database)

yarob/laravel-expirable
=======================

Laravel 5.0+ package to add expirable trait to eloquent models

v1.0.1(9y ago)91.1k4MITPHPPHP &gt;=5.6.4

Since Mar 9Pushed 9y ago2 watchersCompare

[ Source](https://github.com/EazyServer/laravel-expirable)[ Packagist](https://packagist.org/packages/yarob/laravel-expirable)[ RSS](/packages/yarob-laravel-expirable/feed)WikiDiscussions master Synced 6d ago

READMEChangelog (2)Dependencies (1)Versions (3)Used By (0)

Laravel Expirable
=================

[](#laravel-expirable)

Add expiring feature to Eloquent models in Laravel 5.

Background
----------

[](#background)

This has been developed to simplify adding `expirable` feature to any eloquent model on your laravel project.

Installation
------------

[](#installation)

To install the package via Composer:

```
$ composer require yarob/laravel-expirable
```

Then, update `config/app.php` by adding an entry for the service provider.

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

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

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

Updating your Eloquent Models
-----------------------------

[](#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

```
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
---------

[](#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();`.

Usage
-----

[](#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;`

Example:-

```
$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
-------------------------

[](#querying-expirable-models)

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

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

will only gets models that has NOT expired or has `null` expiry date. Any expired models WILL be auto-excluded.

### Including expired Models

[](#including-expired-models)

You can force expired models to appear in query results using `withHasExpiry`

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

### Retrieving Only Expired Models

[](#retrieving-only-expired-models)

The `onlyHasExpiry` method can be used on a relationship query:

```
$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.

### Retrieving Models has `null` expiry

[](#retrieving-models-has-null-expiry)

The `withoutHasExpiry` method can be used in this case:

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

This will bring models that has `null` expiry date.

Configuration
-------------

[](#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:

```
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

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

Copyright and License
---------------------

[](#copyright-and-license)

[laravel-expirable](https://github.com/EazyServer/laravel-expirable) was written by [Yarob Al-Taay](https://twitter.com/TheEpicVoyage) and is released under the [MIT License](LICENSE.md).

Copyright (c) 2017 Yarob Al-Taay

###  Health Score

32

—

LowBetter than 69% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity24

Limited adoption so far

Community12

Small or concentrated contributor base

Maturity59

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 83.3% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~16 days

Total

2

Last Release

3429d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/7568956164220ead625590e1eec22e5864cec256daefba740d4328dfea07bc77?d=identicon)[yarob](/maintainers/yarob)

---

Top Contributors

[![yarobadtrak](https://avatars.githubusercontent.com/u/5136889?v=4)](https://github.com/yarobadtrak "yarobadtrak (5 commits)")[![EazyServer](https://avatars.githubusercontent.com/u/19202935?v=4)](https://github.com/EazyServer "EazyServer (1 commits)")

---

Tags

eloquent-modelsexpired-modelsexpirylaravellaravel-expirabletrait

### Embed Badge

![Health badge](/badges/yarob-laravel-expirable/health.svg)

```
[![Health](https://phpackages.com/badges/yarob-laravel-expirable/health.svg)](https://phpackages.com/packages/yarob-laravel-expirable)
```

###  Alternatives

[statamic/cms

The Statamic CMS Core Package

4.9k3.8M1.1k](/packages/statamic-cms)[cyrildewit/eloquent-viewable

A minimalistic analytics package for Laravel with seamless view tracking for Eloquent models

8881.2M9](/packages/cyrildewit-eloquent-viewable)[bolt/core

🧿 Bolt Core

589148.8k62](/packages/bolt-core)[hyperf/database

A flexible database library.

193.0M351](/packages/hyperf-database)[bitrix24/b24phpsdk

An official PHP library for the Bitrix24 REST API

10250.3k6](/packages/bitrix24-b24phpsdk)[pimcore/studio-backend-bundle

Pimcore Studio Backend Bundle

20248.6k29](/packages/pimcore-studio-backend-bundle)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
