k3progetti / doctrine-repository
Abstract Doctrine repository with common helpers for Symfony projects
1.0.1
2026-03-23 08:07 UTC
Requires
- php: ^8.1
- doctrine/doctrine-bundle: ^2.0|^3.0
- doctrine/orm: ^2.0|^3.0
- symfony/http-foundation: ^6.0|^7.0|^8.0
This package is auto-updated.
Last update: 2026-03-23 08:08:27 UTC
README
Repository Doctrine astratto con helper comuni per progetti Symfony.
Requisiti
- PHP ^8.1
- Symfony ^6.0 | ^7.0 | ^8.0
- Doctrine ORM ^2.0 | ^3.0
Installazione
composer require k3/doctrine-repository
Utilizzo
Estendi la classe Repository al posto di ServiceEntityRepository di Doctrine:
use K3\Repository\Repository; use Doctrine\Persistence\ManagerRegistry; class UserRepository extends Repository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, User::class); } }
Metodi disponibili
Persistenza
| Metodo | Descrizione |
|---|---|
save(object $entity, bool $flush = true) |
Persiste un'entità e opzionalmente esegue il flush |
remove(object $entity, bool $flush = true) |
Rimuove un'entità e opzionalmente esegue il flush |
flush() |
Esegue il flush sull'entity manager |
beginTransaction() |
Avvia una transazione |
commit() |
Conferma la transazione corrente |
rollback() |
Annulla la transazione corrente |
Query
| Metodo | Descrizione |
|---|---|
findOneById(int $id) |
Trova un'entità per ID, restituisce null se non trovata |
getOneById(int $id) |
Trova un'entità per ID, lancia RuntimeException se non trovata |
findByField(string $field, mixed $value, ?array $orderBy = null) |
Trova tutte le entità che corrispondono al valore di un campo |
findOneByField(array $criteria, ?array $orderBy = null) |
Trova una singola entità che corrisponde al valore di un campo |
findByCriteria(AttributeBag $parameters) |
Trova entità con criteri di filtro e paginazione |
countByCriteria(array $filters) |
Conta le entità che corrispondono ai filtri dati |
Helper per i criteri
| Metodo | Descrizione |
|---|---|
prepareFiltersCriteria(array $filters) |
Racchiude un array di filtri in un AttributeBag |
getPaginatedAndFilteredCriteria(AttributeBag $parameters) |
Costruisce un Criteria con filtri, ordinamento e paginazione |
getFiltersCriteria(array $filters) |
Da sovrascrivere nelle sottoclassi per definire i filtri specifici dell'entità |
getBooleanCriteria(Criteria $criteria, string $field, ?string $value) |
Aggiunge una condizione booleana ('Y'/'N') a un Criteria |
getContainsFieldCriteria(Criteria $criteria, string $key, ?string $value) |
Aggiunge una condizione LIKE su un singolo campo |
getContainsFieldsCriteria(Criteria $criteria, array $keys, ?string $value) |
Aggiunge una condizione LIKE su più campi (OR) |
getEqualFieldCriteria(Criteria $criteria, string $key, ?string $value, ?Repository $repository) |
Aggiunge una condizione di uguaglianza, con risoluzione opzionale del valore tramite un altro repository |
Esempio di paginazione
$bag = $this->prepareFiltersCriteria([ 'filters' => ['active' => 'Y'], 'sortBy' => ['name' => 'ASC'], 'limit' => 20, 'offset' => 0, ]); $results = $this->findByCriteria($bag);
Override di getFiltersCriteria
public function getFiltersCriteria(array $filters): Criteria { $criteria = Criteria::create(); $criteria = $this->getBooleanCriteria($criteria, 'active', $filters['active'] ?? null); $criteria = $this->getContainsFieldCriteria($criteria, 'name', $filters['name'] ?? null); return $criteria; }
Licenza
MIT