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();