zidbih / laravel-auto-cache-clear
A Laravel package that automatically clears cache for Eloquent models using PHP attributes. Define cache-clearing behavior directly above your model with the #[ClearCacheWhen] attribute, and let the package handle the rest.
Installs: 13
Dependents: 0
Suggesters: 0
Security: 0
Stars: 0
Watchers: 1
Forks: 0
Open Issues: 0
pkg:composer/zidbih/laravel-auto-cache-clear
Requires
- php: ^8.1
- illuminate/database: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
README
A Laravel package that automatically clears cache for Eloquent models using PHP attributes. Define cache-clearing behavior directly above your model with the #[ClearCacheWhen] attribute, and let the package handle the rest.
Features
- Attribute-Based Configuration: Use the
#[ClearCacheWhen]attribute to define when cache should be cleared for a model. - Automatic Cache Clearing: Automatically clears cache when specified model events occur.
- Dynamic Cache Keys: Define custom cache keys using placeholders like
{model}and{id}. - Static Cache Keys: Clear static cache keys (e.g.,
"users") when model events occur. - Flexible and Extensible: Works with any Eloquent model.
Installation
1. Install the Package
composer require zidbih/laravel-auto-cache-clear
Usage
1. Add the #[ClearCacheWhen] Attribute to Your Model
namespace App\Models; use Illuminate\Database\Eloquent\Model; use Zidbih\LaravelAutoCacheClear\Attributes\ClearCacheWhen; use Zidbih\LaravelAutoCacheClear\Traits\AutoClearsCache; #[ClearCacheWhen(['created', 'updated', 'deleted'], cacheKey: 'user:{id}:details', staticKeys: ['users'])] class User extends Model { use AutoClearsCache; }
Attribute Parameters
events: Model events that should trigger cache clearing (e.g.,['created', 'updated', 'deleted','restored']).cacheKey: Cache key pattern (default:{model}:{id}). You can use placeholders like{model}and{id}.staticKeys: An array of static cache keys to clear (e.g.,['users','posts']).
2. Use the AutoClearsCache Trait
use Zidbih\LaravelAutoCacheClear\Traits\AutoClearsCache; class User extends Model { use AutoClearsCache; }
3. Cache Data in Your Application
use Illuminate\Support\Facades\Cache; // Cache a list of users $users = Cache::remember('users', 60, function () { return User::all(); }); // Cache a single user $user = Cache::remember('user:1:details', 60, function () { return User::find(1); });
When a user is created, updated, or deleted, the cache keys user:1:details and users will automatically be cleared.
Example Workflow
1. Define the Model
#[ClearCacheWhen(['created', 'updated', 'deleted'], staticKeys: ['users'])] class User extends Model { use AutoClearsCache; }
2. Cache Data
$users = Cache::remember('users', 60*60*24, fn () => User::all());
3. Trigger Model Events
When a user is created, updated, or deleted, the following will be cleared:
- The static key:
users
Contributing
Contributions are welcome! Feel free to open an issue or submit a pull request.
License
This package is open-source software licensed under the MIT license.
Credits
Developed by Med Mahmoud Hadaya (zidbih)
Inspired by the Laravel community.