microweber-packages / microweber-repository
Reusable Laravel repository pattern package with caching, query filtering and model observers
Package info
github.com/microweber-packages/microweber-repository
pkg:composer/microweber-packages/microweber-repository
v1.0.0
2026-11-03 16:18 UTC
Requires
- php: ^8.2
- illuminate/cache: ^10.0|^11.0|^12.0|^13.0
- illuminate/database: ^10.0|^11.0|^12.0|^13.0
- illuminate/events: ^10.0|^11.0|^12.0|^13.0
- illuminate/support: ^10.0|^11.0|^12.0|^13.0
- microweber-packages/laravel-helper-functions: *
- microweber-packages/microweber-database: *
- microweber-packages/microweber-deps-laravel-repository: *
- microweber-packages/microweber-event-manager: *
- microweber-packages/microweber-package: *
- spatie/laravel-package-tools: ^1.16
Requires (Dev)
- orchestra/testbench: ^8.0|^9.0|^10.0
- phpunit/phpunit: ^10.0|^11.0
Suggests
None
Provides
None
Conflicts
None
Replaces
- microweber-packages/repository: *
This package is auto-updated.
Last update: 2026-11-03 17:07:31 UTC
README
A reusable Laravel package providing the repository pattern with built-in caching, query filtering, and model observers.
Installation
composer require microweber-packages/microweber-repository
The service provider is auto-discovered by Laravel.
Usage
AbstractRepository
Extend AbstractRepository and set the $model property:
use MicroweberPackages\Repository\Repositories\AbstractRepository; class PostRepository extends AbstractRepository { public $model = Post::class; }
CachingModelRepository
For simple cache-wrapped model queries:
use MicroweberPackages\Repository\Repositories\CachingModelRepository; class PostRepository extends CachingModelRepository { protected string $modelClass = Post::class; public function getPublished(): array { return $this->cached(__FUNCTION__, func_get_args(), function () { return Post::where('status', 'published')->get()->toArray(); }); } }
FilterableByParams Trait
Add filtering capabilities to any Eloquent model:
use MicroweberPackages\Repository\Traits\FilterableByParams; class Post extends Model { use FilterableByParams; } // Then use it: $results = Post::filterByParams([ 'limit' => 10, 'order_by' => 'created_at desc', 'status' => 'active', ])->get();
Testing
composer test
License
MIT