laravie / cabinet
Runtime Cache for Laravel Eloquent
Fund package maintenance!
Liberapay
paypal.me/crynobone
Installs: 12 221
Dependents: 0
Suggesters: 0
Security: 0
Stars: 11
Watchers: 1
Forks: 2
Open Issues: 0
Requires
- php: ^7.3 || ^8.0
- illuminate/cache: ^6.0 || ^7.0 || ^8.0
- illuminate/database: ^6.0 || ^7.0 || ^8.0
Requires (Dev)
- laravel/legacy-factories: ^1.0.4
- orchestra/canvas: ^4.5 || ^5.0 || ^6.1
- orchestra/testbench: ^4.16 || ^5.18 || ^6.17
- predis/predis: ^1.1
README
Cabinet allows you to attach runtime or persistent caching to any Laravel Eloquent instance.
Installation
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.
Quick Installation
Above installation can also be simplify by using the following command:
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:
<?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).
<?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
.
$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.
$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.
$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.
$user->cabinet()->get('birthday');
// or
$user->cabinet('birthday');
Forgetting the data
Laravie\Cabinet\Repository::forget(string $key);
Forget any data by the given $key
.
$user->cabinet()->forget('birthday');
Flushing all data
Laravie\Cabinet\Repository::flush();
Flushing all data for an Eloquent model.
$user->cabinet()->flush();