From 5a01d768837f56e16fcbfbd59f07ccdeca97e115 Mon Sep 17 00:00:00 2001 From: Simon Vieille Date: Mon, 22 Dec 2025 19:23:39 +0100 Subject: [PATCH] feat(repository): add RepositoryQuery::addCaseInsensitiveFilters() feat(repository): add RepositoryQuery::addForcedFilterHandler() --- CHANGELOG.md | 4 ++++ src/core/Repository/RepositoryQuery.php | 21 ++++++++++++++++++++- 2 files changed, 24 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 9e5def0..44ba768 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ ## [Unreleased] +### Added +* feat(repository): add RepositoryQuery::addCaseInsensitiveFilters() +* feat(repository): add RepositoryQuery::addForcedFilterHandler() + ## [v1.27.0] - 2025-12-22 ### Fixed * fix(crud): use route params to redirect after a delation diff --git a/src/core/Repository/RepositoryQuery.php b/src/core/Repository/RepositoryQuery.php index 904c965..b9d22b7 100644 --- a/src/core/Repository/RepositoryQuery.php +++ b/src/core/Repository/RepositoryQuery.php @@ -18,6 +18,7 @@ abstract class RepositoryQuery protected PaginatorInterface $paginator; protected string $id; protected array $forcedFilterHandlers = []; + protected array $caseInsensitiveFilters = []; public function __construct(ServiceEntityRepository $repository, string $id, PaginatorInterface $paginator = null) { @@ -88,7 +89,11 @@ abstract class RepositoryQuery $this->andWhere('.'.$name.' = :'.$name); $this->setParameter(':'.$name, $value); } elseif (is_string($value)) { - $this->andWhere('.'.$name.' LIKE :'.$name); + if (in_array($name, $this->caseInsensitiveFilters)) { + $this->andWhere(sprintf('LOWER (.%1$s) LIKE LOWER(:%1$d)', $name)); + } else { + $this->andWhere('.'.$name.' LIKE :'.$name); + } $this->setParameter(':'.$name, '%'.$value.'%'); } else { $this->filterHandler($name, $value); @@ -142,4 +147,18 @@ abstract class RepositoryQuery protected function filterHandler(string $name, $value) { } + + protected function addCaseInsensitiveFilters(string $name): self + { + $this->caseInsensitiveFilters[] = $name; + + return $this; + } + + protected function addForcedFilterHandlers(string $name): self + { + $this->forcedFilterHandlers[] = $name; + + return $this; + } }