unionworx / laravel-serializes-models-with-cache
This package provides a drop-in replacement for Laravel's SerializesModels trait that leverages your application's cache when unserializing models.
Installs: 54
Dependents: 0
Suggesters: 0
Security: 0
Stars: 2
Watchers: 2
Forks: 0
Open Issues: 0
pkg:composer/unionworx/laravel-serializes-models-with-cache
Requires
- php: ^8.0
- illuminate/database: ^10.0|^11.0|^12.0
- illuminate/queue: ^10.0|^11.0|^12.0
- illuminate/support: ^10.0|^11.0|^12.0
Requires (Dev)
- orchestra/testbench: ^v8.23.2
- phpunit/phpunit: ^9.0
This package is auto-updated.
Last update: 2025-10-27 02:59:08 UTC
README
This package provides a drop-in replacement for Laravel's SerializesModels trait that leverages your application's cache when unserializing models.
Installation
You can install the package via composer:
composer require unionworx/laravel-serializes-models-with-cache
Usage
To use the SerializesModelsWithCache trait, simply replace Laravel's SerializesModels trait with SerializesModelsWithCache in your classes:
use Illuminate\Foundation\Bus\Dispatchable; use Illuminate\Queue\InteractsWithQueue; use UnionWorx\LaravelSerializesModelsWithCache\SerializesModelsWithCache; use App\Models\Message; class SendMessage { use Dispatchable, InteractsWithQueue, SerializesModelsWithCache; public Message $message; public function handle() { // Your job logic } }
Under the hood this uses most of the default behavior of the SerializesModels trait, but will attempt to retrieve the model from the cache before querying the database. This uses the remember feature of the Laravel cache to retrieve the model from the cache or uses the default SerializesModels behavior and stores the result.
Attributes
You can further customize the caching behavior using attributes:
CacheKey: Define a custom cache key for a specific property.CacheTTL: Set a custom Time-To-Live (TTL) for the cache entry of a property.CacheSkip: Skip caching for a specific property.
use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheKey; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheTTL; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheSkip; use App\Models\User; use App\Models\Message; class SendMessage { use Dispatchable, InteractsWithQueue, SerializesModelsWithCache; #[CacheKey(key: 'custom_key_{id}')] #[CacheTTL(ttl: 120)] public Message $message; #[CacheSkip] public User $user; public function handle() { // Your job logic } }
Methods
Alternatively, you can use the cacheKey, cacheTTL, and cacheSkip methods to customize the caching behavior:
use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheKey; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheTTL; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheSkip; use App\Models\User; use App\Models\Message; class SendMessage { use Dispatchable, InteractsWithQueue, SerializesModelsWithCache; public Message $message; public User $user; public function handle() { // Your job logic } public function cacheKey(string $propertyName, mixed $id): ?string { if ($propertyName === 'message') { return 'custom_key_' . $id; } } public function cacheTTL(): array|DateInterval|DateTimeInterface|int|null { return [ 'message' => 120, ]; } public function cacheSkip(): ?array { return [ 'user', ]; } }
Cache Prefix
By default, the cache key is generated using the following pattern model_classname_id. This means that models used across multiple contexts will share the same cache key. In most cases this would be beneficial however, you can further isolate the cache by adding a cachePrefix method to your class. This will apply the prefix to all keys, even if using custom cache keys.
use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheKey; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheTTL; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheSkip; use App\Models\Message; class SendMessage { use Dispatchable, InteractsWithQueue, SerializesModelsWithCache; #[CacheKey(key: 'custom_key_{id}')] public Message $message; public function handle() { // Your job logic } public function cachePrefix(): ?string { return get_class($this); } }
Cache Store
By default, the cache store used is the default cache store defined in your Laravel configuration. You can override this by adding a cacheStoreName method to your class.
use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheKey; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheTTL; use UnionWorx\LaravelSerializesModelsWithCache\Attributes\CacheSkip; use App\Models\Message; class SendMessage { use Dispatchable, InteractsWithQueue, SerializesModelsWithCache; #[CacheKey(key: 'custom_key_{id}')] public Message $message; public function handle() { // Your job logic } public function cacheStoreName(): ?string { return 'file'; } }
Testing
You can run the package tests via composer:
composer test
Changelog
Please see CHANGELOG for more information on recent changes.
Contributing
Please see CONTRIBUTING for details.
Security
If you discover any security related issues, please email chris@unionworx.cloud instead of using the issue tracker.
Credits
License
MIT. Please see License File for more information.