🗄️ Runtime Cache for Laravel Eloquent
Cabinet allows you to attach runtime or persistent caching to any Laravel Eloquent instance.
To install through composer, simply put the following in your composer.json
file:
{
"require": {
"laravie/cabinet": "^3.0"
}
}
And then run composer install
or composer update
from the terminal.
Above installation can also be simplify by using the following command:
composer require "laravie/cabinet=^3.0"
You first need to add Laravie\Cabinet\Cabinet
on an Eloquent Model such as:
<?php
namespace App;
use Illuminate\Foundation\Auth\User as Authenticatable;
use Laravie\Cabinet\Cabinet;
class User extends Authenticatable
{
use Cabinet;
}
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).
<?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'));
}
}
Laravie\Cabinet\Repository::share(string $key, callable $callback);
The method allows a value to be register for $key
using a closure/callable $callback
.
$user->cabinet()->share('birthday', static function ($user) {
return now()->diffInDays($user->birthdate);
});
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.
$user->cabinet()->share('birthday', static function ($user) {
return now()->diffInDays($user->birthdate);
}, 60);
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.
$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);
})
Laravie\Cabinet\Repository::get(string $key);
Retrieving the data using get
method.
$user->cabinet()->get('birthday');
// or
$user->cabinet('birthday');
Laravie\Cabinet\Repository::forget(string $key);
Forget any data by the given $key
.
$user->cabinet()->forget('birthday');
Laravie\Cabinet\Repository::flush();
Flushing all data for an Eloquent model.
$user->cabinet()->flush();