dan/laravel-cached

Your Laravel models, decorated, cached, and pleasantly accessible.

Installs: 29 837

Dependents: 0

Suggesters: 0

Security: 0

Stars: 0

Watchers: 3

Forks: 1

Open Issues: 0

Type:project

v0.1.0 2022-03-16 13:39 UTC

README

A cache decorator that feels like more Laravel.

Highlights

Usage with helper

Examples

// Fetch a model from the cache
$user = cached(User::class, 1);                 // App\User

// The default decorated class or 
// CACHE_DECORATOR specified on model.
$u = cached(User::class, 1, $decorate = true)   // More\Laravel\Cached\CacheDecorator

// A specific decorator to be returned
$u = cached(User::class, 1, Dashboard::class);  // App\Presenters\Dashboard

// A specific decorator to be returned
$u = cachedOrFail(User::class, 200000, Dashboard::class);  // throws ModelNotFoundException

Usage with the macro

Examples

// Find a model from the cache / db
$user = User::cached($id = 1);                  // App\User

// Find or fail from the cache /db 
$user = User::cachedOrFail($id = 200000);       // throws ModelNotFoundException

// Fail with exception or decorate.
$u = User::cachedOrFail($id = 1)->decorate()    // More\Laravel\Cached\CacheDecorator

// Param can be used when model may not be found
$u = User::cached($id = 1, $decorate = true)    // More\Laravel\Cached\CacheDecorator

// A specific decorator to be returned
$u = User::cachedOrFail($id = 1)                // App\Presenters\Dashboard
    ->decorate(Dashboard::class);
    
// A specific decorator to be returned
$u = User::cached($id = 1, Dashboard::class);   // App\Presenters\Dashboard

More on Decorators

A basic CacheDecorator is included by default. But you can publish the config to switch the global default.

Default CacheDecorator

$ php artisan vendor:publish --provider="\More\Laravel\Cached\Support\CachedServiceProvider"

Model constant CACHE_DECORATOR

If your decorator demands various cached methods for your model, you can override the global behavior on each model as well.

class User extends Model
{
    const CACHE_DECORATOR = \App\Metrics\UserMetrics::class;
}

---

$user->decorate();                              // \App\Metrics\UserMetrics

Decorated on run-time

As you've already seen in the examples at the top, you can specify a decorator you want back at run-time.

Suggestions

This pattern plays very nice with hemp/presenter. Just extend his Presenter class, add the trait included, and overload construct.

Additionally, a overloading route-model binding with a drop-in replacement would be cool.

More testing and discovery with nested cache forgetting, and cache pre-warming.

Composer

$ composer require dan/laravel-cached dev-master

Contributors

License

MIT.