From 3fbdedc239a3a457ec61f463f1f6f5d742bab8af Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Julien=20Fastr=C3=A9?= Date: Tue, 17 Feb 2026 18:50:00 +0100 Subject: [PATCH] Add `findByCriteriaIterator` method to `AuditTrailRepository` for streaming large datasets - Introduced a memory-efficient iterable result method to handle large datasets. - Ensures data is streamed without loading all rows into memory, improving performance for extensive audit trail processing. --- .../Repository/AuditTrailRepository.php | 15 +++++++++++++++ 1 file changed, 15 insertions(+) diff --git a/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php b/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php index d7610b602..15e526763 100644 --- a/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php +++ b/src/Bundle/ChillMainBundle/Repository/AuditTrailRepository.php @@ -85,6 +85,21 @@ class AuditTrailRepository extends ServiceEntityRepository ->getQuery()->getSingleScalarResult(); } + /** + * Returns an iterable result set for streaming over large datasets without loading all rows into memory. + * + * @param array{subjects?: list, from_date?: \DateTimeImmutable, to_date?: \DateTimeImmutable, by_users?: list} $criteria + * + * @return iterable + */ + public function findByCriteriaIterator(array $criteria): iterable + { + return $this->buildByCriteriaQuery($criteria) + ->orderBy('audit.occurredAt', 'DESC') + ->getQuery() + ->toIterable(); + } + public function deleteBefore(\DateTimeImmutable $date): void { $this->createQueryBuilder('audit')