laravie/cabinet

Runtime Cache for Laravel Eloquent

Maintainers

👁 crynobone

Package info

github.com/laravie/cabinet

pkg:composer/laravie/cabinet

Fund package maintenance!

Liberapay

paypal.me/crynobone

Statistics

Installs: 12 669

Dependents: 0

Suggesters: 0

Stars: 11

Open Issues: 0

v3.0.2 2021-04-18 16:28 UTC

Requires

Requires (Dev)

Suggests

None

Provides

None

Conflicts

None

Replaces

None

MIT 68b4c42c8039b7e554a95bd927418e872fefb4ba

  • Mior Muhammad Zaki <crynobone.woop@gmail.com>

This package is auto-updated.

Last update: 2026-05-29 01:16:26 UTC


README

Cabinet allows you to attach runtime or persistent caching to any Laravel Eloquent instance.

👁 tests
👁 Latest Stable Version
👁 Total Downloads
👁 Latest Unstable Version
👁 License

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