From a33e81b1ccb9658876ae05344e4f2be305166cc2 Mon Sep 17 00:00:00 2001 From: Mathieu Ducrot Date: Thu, 25 Sep 2025 18:16:31 +0200 Subject: [PATCH] `ProcessStatusEnum::addQbOrderBy` Add method to add a qb order by on the enum --- CHANGELOG.md | 4 ++++ src/Enum/ProcessStatusEnum.php | 17 +++++++++++++++++ 2 files changed, 21 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a146e8d..4931063 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,5 +1,9 @@ CHANGELOG for 1.x =================== +## v1.16.2 - (2025-09-25) +### Added +- `ProcessStatusEnum::addQbOrderBy` Add method to add a qb order by on the enum + ## v1.16.1 - (2025-07-30) ### Changed - Update `phpunit.xml` & `phpstan.neon` config according to standard-bundle v1.1.2 diff --git a/src/Enum/ProcessStatusEnum.php b/src/Enum/ProcessStatusEnum.php index 7a38ea2..5b3442f 100644 --- a/src/Enum/ProcessStatusEnum.php +++ b/src/Enum/ProcessStatusEnum.php @@ -2,6 +2,7 @@ namespace Smart\CoreBundle\Enum; +use Doctrine\ORM\QueryBuilder; use Symfony\Contracts\Translation\TranslatorInterface; enum ProcessStatusEnum: string @@ -57,4 +58,20 @@ public static function labels(TranslatorInterface $translator): array return $translator->trans(self::PREFIX_LABEL . $case->value, [], 'enum'); }, self::cases()); } + + public static function addQbOrderBy(QueryBuilder $qb, string $field, string $order, string $alias = 'o', ?string $jsonProperty = null): void + { + if ($jsonProperty !== null) { + $sort = "FIELD(JSON_UNQUOTE(JSON_EXTRACT($alias.$jsonProperty, '$.$field'))"; + } else { + $sort = "FIELD(ANY_VALUE($alias.$field)"; + } + foreach (self::cases() as $case) { + $sortParamName = ":{$field}_sort_" . $case->value; + $sort .= ', ' . $sortParamName; + $qb->setParameter($sortParamName, $case->value); + } + $sort .= ')'; + $qb->orderBy($sort, $order); + } }