PHPackages                             laymont/laravel-pattern-repository - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Database &amp; ORM](/categories/database)
4. /
5. laymont/laravel-pattern-repository

ActiveLibrary[Database &amp; ORM](/categories/database)

laymont/laravel-pattern-repository
==================================

Laravel package for implementing the Repository Pattern with Eloquent, Criteria, and Actions support

v4.0.1(1mo ago)01.2kMITPHPPHP &gt;=8.3CI passing

Since Dec 29Pushed 1mo ago1 watchersCompare

[ Source](https://github.com/laymont/PatternRepositoryLaravel)[ Packagist](https://packagist.org/packages/laymont/laravel-pattern-repository)[ RSS](/packages/laymont-laravel-pattern-repository/feed)WikiDiscussions main Synced today

READMEChangelog (9)Dependencies (22)Versions (23)Used By (0)

Laravel Pattern Repository
==========================

[](#laravel-pattern-repository)

[![Latest Version on Packagist](https://camo.githubusercontent.com/21b14ed2c34a65235730944bae278ac2285f683cdc8f96f828e27cc87402011c/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6c61796d6f6e742f7061747465726e2d7265706f7369746f72792d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/laymont/pattern-repository-laravel)[![Total Downloads](https://camo.githubusercontent.com/2d6230e2c010982fdb73605ecc0318a9414e72d9985d7a6306b5d875c59cdcad/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6c61796d6f6e742f7061747465726e2d7265706f7369746f72792d6c61726176656c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/laymont/pattern-repository-laravel)[![License: MIT](https://camo.githubusercontent.com/fdf2982b9f5d7489dcf44570e714e3a15fce6253e0cc6b5aa61a075aac2ff71b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d79656c6c6f772e737667)](https://opensource.org/licenses/MIT)[![PHPUnit](https://camo.githubusercontent.com/ba9f2f94579c33aa323cec4210211a32f8abceb21a736b7e6a286f0a3877a524/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f504850556e69742d31312b2d677265656e2e737667)](https://phpunit.de)[![Pest](https://camo.githubusercontent.com/20d6c8d9154a216a98cfb065058f5b896ad949f23fb4d3c255c40927cdec1e2b/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f506573742d332b2d677265656e2e737667)](https://pestphp.com)

Este paquete de Laravel simplifica la implementación del patrón repositorio, ayudando a crear aplicaciones con una arquitectura limpia, mantenible y escalable.

¿Qué es el Patrón Repositorio?
------------------------------

[](#qué-es-el-patrón-repositorio)

El patrón repositorio actúa como una capa de abstracción entre la lógica de negocio y la capa de acceso a datos. Al usar repositorios, tus controladores y servicios interactúan con los datos a través de interfaces, sin necesidad de conocer la implementación concreta del acceso a datos (por ejemplo, consultas a la base de datos). Esto aporta múltiples ventajas:

- **Desacoplamiento:** Reduce la dependencia entre las diferentes capas de la aplicación.
- **Facilidad de prueba:** Permite realizar pruebas unitarias de la lógica de negocio sin necesidad de una base de datos real (usando mocks).
- **Flexibilidad:** Facilita el cambio de la implementación del acceso a datos (por ejemplo, cambiar de base de datos o usar un ORM diferente) sin afectar la lógica de negocio.
- **Código organizado:** Promueve un código más limpio, estructurado y fácil de mantener.
- **Reutilización:** Facilita la reutilización de la lógica de acceso a datos en diferentes partes de la aplicación.

Compatibilidad
--------------

[](#compatibilidad)

- **Laravel Framework:** `^13.0`
- **PHP:** `>=8.3`

Instalación
-----------

[](#instalación)

Puedes instalar el paquete usando Composer:

```
composer require laymont/pattern-repository-laravel
```

El paquete se autodescubre, por lo que no es necesario registrar el ServiceProvider.

Estructura del Paquete
----------------------

[](#estructura-del-paquete)

```
src/
├── Actions/
│   ├── CreateAction.php      # Acción para crear registros
│   ├── UpdateAction.php     # Acción para actualizar registros
│   └── DeleteAction.php     # Acción para eliminar registros
├── Concerns/
│   ├── Cacheable.php       # Trait para caché de consultas
│   ├── HasCriteria.php     # Trait para patrón Criteria
│   └── HasEloquentScopes.php # Trait para global scopes
├── Contracts/
│   ├── RepositoryInterface.php           # Interfaz base del repositorio
│   ├── ReadableRepositoryInterface.php   # Interfaz solo lectura
│   ├── WritableRepositoryInterface.php # Interfaz solo escritura
│   └── CriteriaInterface.php          # Interfaz para Criteria
├── Criteria/
│   ├── WhereEqualsCriteria.php       # Criteria para WHERE campo = valor
│   └── SearchWhereLikeCriteria.php   # Criteria para búsqueda LIKE
├── Repositories/
│   └── EloquentRepository.php # Repositorio base con Eloquent
└── Providers/
    └── PatternRepositoryServiceProvider.php

```

Uso Rápido
----------

[](#uso-rápido)

### 1. Crear un Repositorio

[](#1-crear-un-repositorio)

```
use Laymont\PatternRepository\Repositories\EloquentRepository;
use App\Models\User;

class UserRepository extends EloquentRepository
{
    public function __construct(User $model)
    {
        parent::__construct($model);
    }
}
```

### 2. Usar el Repositorio

[](#2-usar-el-repositorio)

```
// Inyectar en controlador
public function __construct(
    protected UserRepository $users
) {}

// Obtener todos los usuarios
$users = $this->users->all();

// Buscar por ID
$user = $this->users->find($id);

// Crear usuario
$user = $this->users->create($data);

// Actualizar usuario
$this->users->update($id, $data);

// Eliminar usuario
$this->users->delete($id);

// Paginar
$users = $this->users->paginate(15);
```

Características Avanzadas
-------------------------

[](#características-avanzadas)

### Patrón Criteria

[](#patrón-criteria)

```
use Laymont\PatternRepository\Criteria\WhereEqualsCriteria;

$repository->pushCriteria(new WhereEqualsCriteria('active', true));
$users = $repository->all();
$repository->resetCriteria();
```

### Caché de Consultas

[](#caché-de-consultas)

```
$repository->enableCache(60); // Habilitar caché con TTL de 60 segundos
$repository->disableCache();    // Deshabilitar caché

// Los resultados se cachean automáticamente
```

### Acciones Atómicas

[](#acciones-atómicas)

```
use Laymont\PatternRepository\Actions\CreateAction;
use App\Models\User;

$action = app(CreateAction::class);
$user = $action->execute(new User(), $data);
```

### Scopes de Eloquent

[](#scopes-de-eloquent)

```
$repository->withScopes();      // Aplicar todos los global scopes
$repository->withoutScopes();  // Quitar todos los global scopes
```

Interfaces Separadas
--------------------

[](#interfaces-separadas)

### ReadableRepositoryInterface

[](#readablerepositoryinterface)

```
use Laymont\PatternRepository\Contracts\ReadableRepositoryInterface;

interface UserReadRepository extends ReadableRepositoryInterface
{
    public function findByEmail(string $email): ?User;
}
```

### WritableRepositoryInterface

[](#writablerepositoryinterface)

```
use Laymont\PatternRepository\Contracts\WritableRepositoryInterface;

interface UserWriteRepository extends WritableRepositoryInterface
{
    public function firstOrCreate(array $data): User;
    public function updateOrCreate(array $search, array $data): User;
}
```

Comandos Artisan
----------------

[](#comandos-artisan)

```
# Generar repositorio
php artisan make:repository User

# Generar con opciones
php artisan make:repository User --abstract --criteria --interfaces=separate
```

Configuración
-------------

[](#configuración)

Publica el archivo de configuración:

```
php artisan vendor:publish --provider="Laymont\PatternRepository\Providers\PatternRepositoryServiceProvider"
```

Edita `config/pattern-repository.php`:

```
return [
    'namespace' => 'App\\Repositories',
    'path' => app_path('Repositories'),
    'enable_cache' => false,
    'cache_ttl' => 60,
    'pagination' => [
        'default_per_page' => 15,
        'max_per_page' => 100,
    ],
];
```

Pruebas
-------

[](#pruebas)

El paquete incluye 39 tests con cobertura de:

- Actions (Create, Update, Delete)
- EloquentRepository
- Concerns (Cacheable, HasCriteria, HasEloquentScopes)
- Criteria (WhereEqualsCriteria)
- Contracts (todas las interfaces)

Ver TESTING.md para más detalles.

Actualizaciones de v4.0.0
-------------------------

[](#actualizaciones-de-v400)

- ✅ Soporte para Laravel 13
- ✅ Nuevo `EloquentRepository` base con traits
- ✅ Actions separadas para operaciones CRUD
- ✅ 39 tests automatizados con SQLite en memoria
- ✅ Contratos mejorados (RepositoryInterface, ReadableInterface, WritableInterface)

---

Para una guía detallada, consulta el archivo TESTING.md.

Contribución
------------

[](#contribución)

1. Haz un fork del repositorio.
2. Crea una rama: `git checkout -b feature/nueva-funcionalidad`.
3. Realiza cambios y hace commit: `git commit -m "Agregando..."`.
4. Sube: `git push origin feature/nueva-funcionalidad`.
5. Abre un Pull Request.

Donaciones
----------

[](#donaciones)

Si encuentras útil este paquete y deseas apoyar su desarrollo y mantenimiento, puedes considerar hacer una donación.

### Zinli

[](#zinli)

- **ID de usuario:** 3-002-58546608-36
- **Recargar:**

### Visa Prepagada Zinli

[](#visa-prepagada-zinli)

- **Número:** 4850460061276928

### Binance Pay

[](#binance-pay)

- **Binance Pay ID:** 206414132

¡Gracias por tu apoyo!

Licencia
--------

[](#licencia)

MIT License. Ver LICENSE para más detalles.

###  Health Score

48

—

FairBetter than 93% of packages

Maintenance92

Actively maintained with recent releases

Popularity18

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity63

Established project with proven stability

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~51 days

Recently: every ~95 days

Total

11

Last Release

38d ago

Major Versions

v1.0.5 → v2.0.02025-05-12

v2.0.1 → v3.0.02025-11-13

v3.0.0 → v4.0.02026-04-28

PHP version history (3 changes)1.0.0PHP ^8.2

v2.0.0PHP &gt;=8.2

v3.0.0PHP &gt;=8.3

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/13275422?v=4)[Laymont Arratia](/maintainers/laymont)[@laymont](https://github.com/laymont)

---

Top Contributors

[![laymont](https://avatars.githubusercontent.com/u/13275422?v=4)](https://github.com/laymont "laymont (48 commits)")

---

Tags

laraveleloquentrepositorypatterncriteria

###  Code Quality

TestsPest

### Embed Badge

![Health badge](/badges/laymont-laravel-pattern-repository/health.svg)

```
[![Health](https://phpackages.com/badges/laymont-laravel-pattern-repository/health.svg)](https://phpackages.com/packages/laymont-laravel-pattern-repository)
```

###  Alternatives

[spatie/laravel-medialibrary

Associate files with Eloquent models

6.1k43.2M633](/packages/spatie-laravel-medialibrary)[laravel/ai

The official AI SDK for Laravel.

1.0k3.2M203](/packages/laravel-ai)[api-platform/laravel

API Platform support for Laravel

58171.8k14](/packages/api-platform-laravel)[itpathsolutions/dbstan

Database Standardization and Analysis Tool for Laravel

492.9k](/packages/itpathsolutions-dbstan)[tomshaw/electricgrid

A feature-rich Livewire package designed for projects that require dynamic, interactive data tables.

119.4k](/packages/tomshaw-electricgrid)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
