laravie / cabinet
Runtime Cache for Laravel Eloquent
Fund package maintenance!
Liberapay
paypal.me/crynobone
Installs: 11 750
Dependents: 0
Suggesters: 0
Security: 0
Stars: 11
Watchers: 2
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();