A flexible and feature-rich implementation of the Repository Pattern for Laravel applications.
composer require madulinux/repository-pattern
php artisan make:repository User
This will create:
app/Repositories/UserRepository.phpapp/Repositories/Interfaces/UserRepositoryInterface.phpclass UserRepository extends Repository implements UserRepositoryInterface
{
public function __construct(User $model)
{
$this->model = $model;
}
}
// Usage
$users = $repository->all();
$user = $repository->find(1);
$user = $repository->create(['name' => 'John']);
$repository->update(1, ['name' => 'Jane']);
$repository->delete(1);
// Enable/Disable cache
$repository->enableCache();
$repository->disableCache();
// Set cache time
$repository->setCacheTime(60); // 60 minutes
// Set cache tags (for Redis/Memcached)
$repository->setCacheTags(['users']);
// Custom cache key
$repository->setCacheKeyGenerator(function($method, $args, $model) {
return "users:{$method}:" . md5(serialize($args));
});
$repository->on('creating', function($data) {
// Before create
});
$repository->on('created', function($model) {
// After create
});
// Available events:
// - creating/created
// - updating/updated
// - deleting/deleted
// Get with soft deleted records
$repository->withTrashed()->get();
// Get only soft deleted records
$repository->onlyTrashed()->get();
// Restore soft deleted records
$repository->restore($id);
// Force delete
$repository->forceDelete($id);
// Insert multiple
$repository->insert([
['name' => 'John'],
['name' => 'Jane']
]);
// Update multiple
$repository->bulkUpdate(
['status' => 'active'],
['department' => 'IT']
);
// Delete multiple
$repository->bulkDelete([1, 2, 3]);
// Upsert
$repository->upsert(
[['id' => 1, 'name' => 'John']],
'id',
['name']
);
// Chunk processing
$repository->chunk(100, function($users) {
foreach($users as $user) {
// Process each user
}
});
// Using callback
$repository->transaction(function() use ($repository) {
$user = $repository->create(['name' => 'John']);
$profile = $repository->create(['user_id' => $user->id]);
});
// Manual control
$repository->beginTransaction();
try {
$user = $repository->create(['name' => 'John']);
$profile = $repository->create(['user_id' => $user->id]);
$repository->commit();
} catch (\Exception $e) {
$repository->rollBack();
throw $e;
}
// Chainable methods
$repository
->with(['posts', 'comments'])
->filter(['status' => 'active'])
->orderBy('created_at', 'desc')
->paginate(15);
// Search
$users = $repository->search('john', ['name', 'email']);
// Advanced filtering
$users = $repository->getFiltered([
'status' => 'active',
'role' => ['admin', 'manager'],
'age' => ['operator' => '>=', 'value' => 18]
], [
'sort_by' => 'created_at',
'sort_direction' => 'desc',
'per_page' => 15
]);
composer test
Please see CONTRIBUTING for details.
If you discover any security related issues, please email security@example.com instead of using the issue tracker.
The MIT License (MIT). Please see License File for more information.
How can I help you explore Laravel packages today?