From f0f7b04cb8bc1b79ccbebb4252fbadbf0077a6d0 Mon Sep 17 00:00:00 2001 From: Tobias Oitzinger Date: Tue, 3 Dec 2024 13:24:41 +0100 Subject: [PATCH 1/2] fix(laravel): fix default order parameter Closes: #6839 Signed-off-by: Tobias Oitzinger --- .../Eloquent/State/CollectionProvider.php | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/src/Laravel/Eloquent/State/CollectionProvider.php b/src/Laravel/Eloquent/State/CollectionProvider.php index 2557dd842c9..846cbb81ab0 100644 --- a/src/Laravel/Eloquent/State/CollectionProvider.php +++ b/src/Laravel/Eloquent/State/CollectionProvider.php @@ -58,6 +58,30 @@ public function provide(Operation $operation, array $uriVariables = [], array $c $query = $extension->apply($query, $uriVariables, $operation, $context); } + $order = $operation->getOrder(); + if (null !== $order) { + $isList = array_is_list($order); + foreach ($operation->getOrder() ?? [] as $property => $direction) { + if ($isList) { + $property = $direction; + $direction = 'ASC'; + } + + if (str_contains($property, '.')) { + [$table, $property] = explode('.', $property); + + // Relation Order by, we need to do laravel eager loading + $query->with([ + $table => fn ($query) => $query->orderBy($property, $direction), + ]); + + continue; + } + + $query->orderBy($property, $direction); + } + } + if (false === $this->pagination->isEnabled($operation, $context)) { return $query->get(); } From 3160ae9335fd3f0060adcd78e8b9b84f7c370f1c Mon Sep 17 00:00:00 2001 From: Antoine Bluchet Date: Fri, 6 Dec 2024 11:51:52 +0100 Subject: [PATCH 2/2] Update src/Laravel/Eloquent/State/CollectionProvider.php --- src/Laravel/Eloquent/State/CollectionProvider.php | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/src/Laravel/Eloquent/State/CollectionProvider.php b/src/Laravel/Eloquent/State/CollectionProvider.php index 846cbb81ab0..3c677520e93 100644 --- a/src/Laravel/Eloquent/State/CollectionProvider.php +++ b/src/Laravel/Eloquent/State/CollectionProvider.php @@ -58,10 +58,9 @@ public function provide(Operation $operation, array $uriVariables = [], array $c $query = $extension->apply($query, $uriVariables, $operation, $context); } - $order = $operation->getOrder(); - if (null !== $order) { + if ($order = $operation->getOrder()) { $isList = array_is_list($order); - foreach ($operation->getOrder() ?? [] as $property => $direction) { + foreach ($order as $property => $direction) { if ($isList) { $property = $direction; $direction = 'ASC';