Download the PHP package andydefer/laravel-repository without Composer
On this page you can find all versions of the php package andydefer/laravel-repository. It is possible to download/install these versions without Composer. Possible dependencies are resolved automatically.
Download andydefer/laravel-repository
More information about andydefer/laravel-repository
Files in andydefer/laravel-repository
Package laravel-repository
Short Description A lightweight, type-safe repository pattern implementation for Laravel
License MIT
Informations about the package laravel-repository
Laravel Repository
Une implémentation légère et typée du pattern Repository pour Laravel avec intégration Records et Eloquent.
Table des matières
- Installation
- Concepts fondamentaux
- Créer votre premier Repository
- Référence de l'API
- Méthodes à surcharger
- Bonnes pratiques
- Exemple complet avec filtres complexes
- Tests
- Génération de code avec Directive Forge
- Licence
Installation
Prérequis
- PHP 8.1 ou supérieur
- Laravel 12.x, 13.x, 14.x ou 15.x
- Dépendances automatiques :
andydefer/php-records(structures typées)laravel/framework
Publier la configuration (Optionnel)
Concepts fondamentaux
Le Record
Un Record est un DTO typé qui sert d'interface entre votre code et le Repository.
Règles pour les Records :
- ✅ Étendre
AbstractRecord - ✅ Propriétés
public readonly - ✅ Les champs optionnels =
nullpar défaut - ❌ Pas de logique métier
- ❌ Pas de tableaux bruts (utiliser
TypedCollection)
Records de configuration
Le package fournit des Records standardisés pour les opérations :
FindByRecord
| Propriété | Type | Défaut | Description |
|---|---|---|---|
filters |
AbstractRecord |
EmptyRecord |
Filtres de recherche |
limit |
?int |
null |
Limite de résultats |
sortBy |
?SortColumns |
null |
Colonnes de tri (supporte le multi-colonnes) |
columns |
SelectColumns |
SelectColumns::all() |
Colonnes à sélectionner |
PaginateRecord
| Propriété | Type | Défaut | Description |
|---|---|---|---|
perPage |
int |
15 |
Éléments par page |
page |
int |
1 |
Numéro de page |
sortBy |
?SortColumns |
null |
Colonnes de tri (supporte le multi-colonnes) |
filters |
AbstractRecord |
EmptyRecord |
Filtres de recherche |
columns |
SelectColumns |
SelectColumns::all() |
Colonnes à sélectionner |
RepositoryInfoRecord
Objet Valeur SortColumns
Le package fournit un Value Object pour gérer le tri simple ou multi-colonnes :
Format de chaîne : colonne:direction|colonne:direction
directionpeut êtreascoudesc- Les colonnes sont séparées par le caractère
|(pipe)
Objet Valeur SelectColumns
Créer votre premier Repository
1. Créer le Modèle
2. Créer le Record
3. Créer le Record de filtres (Optionnel)
4. Créer le Repository
5. Utiliser le Repository
Référence de l'API
AbstractRepository
| Méthode | Paramètres | Retour | Description |
|---|---|---|---|
info() |
- | RepositoryInfoRecord |
Informations du repository |
create(AbstractRecord $record) |
$record |
Model |
Créer un nouvel enregistrement |
createRaw(array $data) |
$data |
Model |
Créer un enregistrement à partir de données brutes |
find(int $id) |
$id |
Model|null |
Trouver par ID |
findWithTrashed(int $id) |
$id |
Model|null |
Trouver par ID (inclus soft deleted) |
findBy(FindByRecord $record) |
$record |
Collection<Model> |
Rechercher avec critères (supporte tri multiple) |
update(int $id, AbstractRecord $record) |
$id, $record |
Model |
Mettre à jour (champs non-nuls uniquement) |
updateRaw(int $id, array $data) |
$id, $data |
Model |
Mettre à jour avec données brutes |
delete(int $id) |
$id |
bool |
Supprimer par ID (soft delete si disponible) |
restore(int $id) |
$id |
bool |
Restaurer un soft deleted |
forceDelete(int $id) |
$id |
bool |
Supprimer définitivement |
count(?AbstractRecord $criteria) |
$criteria |
int |
Compter les enregistrements |
exists(AbstractRecord $criteria) |
$criteria |
bool |
Vérifier l'existence |
paginate(PaginateRecord $record) |
$record |
LengthAwarePaginator |
Résultats paginés (supporte tri multiple) |
deleteBulk(AbstractRecord $criteria) |
$criteria |
int |
Suppression groupée (soft delete si disponible) |
forceDeleteBulk(AbstractRecord $criteria) |
$criteria |
int |
Suppression définitive groupée |
Méthodes à surcharger
| Méthode | Description |
|---|---|
applyFilters(Builder $query, AbstractRecord $filters) |
Appliquer les filtres de recherche (doit être surchargée) |
Exceptions
| Exception | Quand |
|---|---|
ModelNotFoundException |
update() ou updateRaw() sur un ID inexistant |
InvalidArgumentException |
Nom de colonne invalide dans SelectColumns ou SortColumns |
Bonnes pratiques
1. Un Record par Entité
2. Record de filtres séparé pour les cas complexes
3. Utiliser des valeurs par défaut pour les champs optionnels
4. Implémenter applyFilters() proprement
5. Utiliser createRaw pour des données brutes
6. Trier avec SortColumns
7. Tester vos Repositories
Exemple complet avec filtres complexes et tri multiple
Support Soft Delete
Le repository détecte automatiquement si votre modèle utilise le trait SoftDeletes et adapte son comportement :
| Méthode | Comportement standard | Avec SoftDeletes |
|---|---|---|
delete() |
Suppression définitive | Soft delete (deleted_at rempli) |
find() |
Retourne tous les modèles | Exclut les soft deleted |
findWithTrashed() |
Comportement standard | Inclut les soft deleted |
restore() |
Non disponible | Restaure un soft deleted |
forceDelete() |
Non disponible | Suppression définitive |
deleteBulk() |
Suppression définitive groupée | Soft delete groupé |
forceDeleteBulk() |
Non disponible | Suppression définitive groupée |
Tests
Configuration des tests
Le package utilise SQLite en mémoire pour les tests d'intégration :
Exécuter les tests
Génération de code avec Directive Forge
Ce package s'intègre à directive-forge pour générer automatiquement les repositories, records et filtres.
Installer Directive Forge
Commandes disponibles
Exemple de génération
Licence
MIT © Andy Defer
All versions of laravel-repository with dependencies
laravel/framework Version ^12.0|^13.0|^14.0|^15.0
andydefer/php-vo Version ^0.19.0