Weave Code
Code Weaver
Helps Laravel developers discover, compare, and choose open-source packages. See popularity, security, maintainers, and scores at a glance to make better decisions.
Feedback
Share your thoughts, report bugs, or suggest improvements.
Subject
Message

Repository Pattern Laravel Package

madulinux/repository-pattern

View on GitHub
Deep Wiki
Context7

Laravel Repository Pattern

A flexible and feature-rich implementation of the Repository Pattern for Laravel applications.

Features

  • 🚀 CRUD Operations - Basic create, read, update, and delete operations
  • 💾 Caching Support - Automatic caching with customizable drivers and keys
  • 🔄 Event System - Before/After events for all operations
  • 🗑️ Soft Deletes - Built-in support for soft deletes
  • 📦 Bulk Operations - Efficient handling of multiple records
  • 💼 Transactions - Database transaction support
  • 🔍 Query Builder - Chainable query methods
  • 📄 Pagination - Built-in pagination support
  • 🔎 Search - Simple and advanced search capabilities

Installation

composer require madulinux/repository-pattern

Basic Usage

Generate Repository

php artisan make:repository User

This will create:

  • app/Repositories/UserRepository.php
  • app/Repositories/Interfaces/UserRepositoryInterface.php

Basic Operations

class 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);

Caching

// 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));
});

Events

$repository->on('creating', function($data) {
    // Before create
});

$repository->on('created', function($model) {
    // After create
});

// Available events:
// - creating/created
// - updating/updated
// - deleting/deleted

Soft Deletes

// 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);

Bulk Operations

// 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
    }
});

Transactions

// 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;
}

Query Builder

// 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
]);

Testing

composer test

Contributing

Please see CONTRIBUTING for details.

Security

If you discover any security related issues, please email security@example.com instead of using the issue tracker.

Credits

License

The MIT License (MIT). Please see License File for more information.

Weaver

How can I help you explore Laravel packages today?

Conversation history is not saved when not logged in.
Prompt
Add packages to context
No packages found.
datacore/hub-sdk
alengo/sulu-http-cache-bundle
develia/commons
cuci/prototurk-sdk
cuci/prototurk-sdk-symfony
develia/geo-bundle
dreamzy/livewire-charts
touchestate-sdk/php-sdk
22h/doctrine-garbage-collection-bundle
imbo/imbo-coding-standard
visualbuilder/filament-lottie
servicioslineaonce/starter-kit
atomcoder/laravel-reorderable
irajul/filament-shadcn-theme
agtp/agtp-php
agtp/mod-php
centraldesktop/protobuf-php
trappistes/laravel-custom-fields
splash/sonata-admin
splash/metadata