Runtime Cache for Laravel Eloquent
Cabinet allows you to attach runtime or persistent caching to any Laravel Eloquent instance., (*1)
, (*2)
Installation
To install through composer, simply put the following in your composer.json
file:, (*3)
{
"require": {
"laravie/cabinet": "^3.0"
}
}
And then run composer install
or composer update
from the terminal., (*4)
Quick Installation
Above installation can also be simplify by using the following command:, (*5)
composer require "laravie/cabinet=^3.0"
Usages
Setup Cabinet on a Model
You first need to add Laravie\Cabinet\Cabinet
on an Eloquent Model such as:, (*6)
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Cabinet\Cabinet;
class User extends Authenticatable
{
use Cabinet;
}
Allow persistent caching
To add persistent caching on the Eloquent, you have to attach a cache storage that support tags (Cache tags are not supported when using the file
or database
cache driver)., (*7)
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Cabinet\Cabinet;
class User extends Authenticatable
{
use Cabinet;
/**
* Configure cabinet for the eloquent model.
*
* @param \Laravie\Cabinet\Repository $cabinet
* @return void
*/
protected function onCabinet($cabinet)
{
$cabinet->setStorage(resolve('cache.store'));
}
}
Storing data
Runtime
Laravie\Cabinet\Repository::share(string $key, callable $callback);
The method allows a value to be register for $key
using a closure/callable $callback
., (*8)
$user->cabinet()->share('birthday', static function ($user) {
return now()->diffInDays($user->birthdate);
});
Persistent with TTL
Laravie\Cabinet\Repository::share(string $key, callable $callback, $ttl = null);
By adding the 3rd parameter $ttl
(in seconds), Cabinet will attempt to store the data in cache for $ttl
seconds., (*9)
$user->cabinet()->share('birthday', static function ($user) {
return now()->diffInDays($user->birthdate);
}, 60);
Forever
Laravie\Cabinet\Repository::forever(string $key, callable $callback);
You can either use forever
as the 3rd parameter using share
or use forever
to cache the value indefinitely., (*10)
$user->cabinet()->share('birthday', static function ($user) {
return now()->diffInDays($user->birthdate);
}, 'forever');
// or
$user->cabinet->forever('birthday', static function ($user) {
return now()->diffInDays($user->birthdate);
})
Retrieving the data
Laravie\Cabinet\Repository::get(string $key);
Retrieving the data using get
method., (*11)
$user->cabinet()->get('birthday');
// or
$user->cabinet('birthday');
Forgetting the data
Laravie\Cabinet\Repository::forget(string $key);
Forget any data by the given $key
., (*12)
$user->cabinet()->forget('birthday');
Flushing all data
Laravie\Cabinet\Repository::flush();
Flushing all data for an Eloquent model., (*13)
$user->cabinet()->flush();