This package allows the Laravel Cache driver to be easily used for model instances. By default, logged in users will have their own separate cache-prefix.
Install the package via composer:
composer require foxws/laravel-modelcache
Publish the config file with:
php artisan vendor:publish --tag="modelcache-config"
Implement the Foxws\ModelCache\Concerns\InteractsWithModelCache
trait to your Eloquent model:
use Foxws\ModelCache\Concerns\InteractsWithModelCache;
use Illuminate\Database\Eloquent\Model;
class Video extends Model
{
use InteractsWithModelCache;
}
It is also possible to use the ModelCache
Facade directly:
use Foxws\ModelCache\Facades\ModelCache;
class MyActionClass
{
public function handle(Video $model): void
{
if (! ModelCache::enabled()) {
// modelcaching is disabled
return;
}
ModelCache::cache($model, 'foo', 'bar');
ModelCache::hasBeenCached($model, 'foo');
ModelCache::getCachedValue($model, 'foo');
}
}
To put a cache value for a model instance:
Video::first()->modelCache('currentTime', 20);
Video::first()->modelCache('randomSeed', 20, now()->addDay()); // cache for one day
To retrieve a cached model instance value:
Video::first()->modelCached('currentTime');
Video::first()->modelCached('randomSeed', $default); // with fallback
To validate if a cached model instance value exists:
$model = Video::findOrFail(10);
if (! $model->hasModelCache('currentTime')) {
$model->modelCache('currentTime', 20);
}
return $model->modelCached('currentTime');
To forget a cached model value:
Video::first()->modelCacheForget('currentTime');
Video::first()->modelCacheForget('randomSeed');
To put a model cache value based on its class:
Video::setModelCache('randomSeed', 0.1);
Video::setModelCache('randomSeed', 0.1, now()->addDay()); // cache for one day
To retrieve a model class cached value:
Video::getModelCache('randomSeed');
Video::getModelCache('randomSeed', $default);
To validate if a model class cached value exists:
Video::hasModelCache('randomSeed');
To forget a model class cached value:
Video::forgetModelCache('randomSeed');
To determine which values should be cached, a cache profile class is used. The default class that handles these questions is Foxws\ModelCache\CacheProfiles\CacheAllSuccessful
.
You can create your own cache profile class by implementing the Foxws\ModelCache\CacheProfile\CacheProfile
, and overruling the cache_profile
in config/modelcache.php
.
It is also possible to overrule the cache prefix using the model instance. For this create a method named cacheNameSuffix
on the model instance:
use Foxws\ModelCache\Concerns\InteractsWithModelCache;
use Illuminate\Database\Eloquent\Model;
use Illuminate\Support\Facades\Auth;
class Video extends Model
{
use InteractsWithModelCache;
protected function cacheNameSuffix(string $key): string
{
// return Auth::check()
// ? (string) Auth::id()
// : '';
// return "{$key}:{$this->getMorphClass()}";
return ''; // do not use a separate cache for users
}
}
composer test
Please see CHANGELOG for more information on what has changed recently.
Please see CONTRIBUTING for details.
Please review our security policy on how to report security vulnerabilities.
This package is entirely based on the space/laravel-responsecache package.
Please consider to sponsor Spatie, such as purchasing their excellent courses. :)
The MIT License (MIT). Please see License File for more information.