Automatically cache basic Eloquent models using the
find
methods
- PHP >= 5.5.9
- Laravel >= 5.1
Install via composer - In the terminal
composer require pulkitjalan/cacheable
This package makes use of pulkitjalan\multicache which requires a service provider to be registered. So add the following to the providers
array in your config/app.php
PulkitJalan\Cache\Providers\MultiCacheServiceProvider::class
Simply use the Cacheable
trait in any model you want to be cache automatically.
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use PulkitJalan\Cacheable\Cacheable;
class CachedModel extends Model
{
use Cacheable;
}
Caching the model only works with using the find
, findMany
or findOrFail
methods.
If you would like caching behavior like in Laravel 4 then consider using dwightwatson/rememberable which adds the remember
function back into eloquent. Both packages can be used together also.
You can optinally set the expiry time in minutes for the model, by default it is set to 1440
minutes (24 hours).
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use PulkitJalan\Cacheable\Cacheable;
class CachedModel extends Model
{
use Cacheable;
/**
* Set the cache expiry time.
*
* @var int
*/
public $cacheExpiry = 60;
}
Models are cached using the models table name
as the cache tag and the id
as the key. There are observers which get registered in the trait to also remove from cache when the saved
or deleted
.
Caching is only applied to basic models (ones without any conditions added).
// cached
CachedModel::find(1);
// not cached
CachedModel::where('some_field', 1)->find(1);
// not cached
CachedModel::with('relation')->find(1);
The cache can be manually cleared by calling the new refresh
method on the cached model which can be found in the Cacheable
trait.
// manually clear cache
CachedModel::find(1)->refresh();