From 8600ff6bc2ac77f3e48753ba60ab54c16a0673bd Mon Sep 17 00:00:00 2001 From: jonmldr Date: Sat, 26 Jul 2025 15:45:10 +0200 Subject: [PATCH] Prioritize sorted order by item when already present in querybuilder --- .../Sortable/Doctrine/ORM/Query/OrderByWalker.php | 13 ++++++------- 1 file changed, 6 insertions(+), 7 deletions(-) diff --git a/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php b/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php index e8508090..69722502 100644 --- a/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php +++ b/src/Knp/Component/Pager/Event/Subscriber/Sortable/Doctrine/ORM/Query/OrderByWalker.php @@ -71,21 +71,20 @@ public function walkSelectStatement(SelectStatement $AST): void $orderByItem->type = $direction; if ($AST->orderByClause) { - $set = false; - foreach ($AST->orderByClause->orderByItems as $item) { + $orderByItems = &$AST->orderByClause->orderByItems; + foreach ($orderByItems as $orderByIndex => $item) { if ( $item->expression instanceof PathExpression && $item->expression->identificationVariable === $alias && $item->expression->field === $field ) { - $item->type = $direction; - $set = true; + unset($orderByItems[$orderByIndex]); + break; } } - if (!$set) { - array_unshift($AST->orderByClause->orderByItems, $orderByItem); - } + + array_unshift($orderByItems, $orderByItem); } else { $AST->orderByClause = new OrderByClause([$orderByItem]); }