diff --git a/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php b/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
index f18c5f4b057..2f0c8f48996 100644
--- a/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
+++ b/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php
@@ -72,6 +72,7 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
$queryBuilderClone = clone $queryBuilder;
$queryBuilderClone->resetDQLPart('where');
$changedWhereClause = false;
+ $in = null;
if (!$classMetadata->isIdentifierComposite) {
$replacementAlias = $queryNameGenerator->generateJoinAlias($originAlias);
@@ -98,6 +99,10 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
return;
}
+ if (\count($in->getDQLPart('orderBy')) === \count($queryBuilder->getDQLPart('orderBy'))) {
+ $queryBuilder->resetDQLPart('orderBy');
+ }
+
$queryBuilder->resetDQLPart('where');
$queryBuilder->add('where', $queryBuilderClone->getDQLPart('where'));
}
@@ -114,6 +119,7 @@ private function getQueryBuilderWithNewAliases(QueryBuilder $queryBuilder, Query
$joinParts = $queryBuilder->getDQLPart('join');
$wherePart = $queryBuilder->getDQLPart('where');
+ $orderByPart = $queryBuilder->getDQLPart('orderBy');
//reset parts
$queryBuilderClone->resetDQLPart('join');
@@ -158,6 +164,15 @@ private function getQueryBuilderWithNewAliases(QueryBuilder $queryBuilder, Query
$queryBuilderClone->add('where', str_replace($aliases, $replacements, (string) $wherePart));
+ foreach ($orderByPart as $order) {
+ $oldOrderBy = (string) $order;
+ $newOrderBy = str_replace($aliases, $replacements, $oldOrderBy);
+
+ if ($newOrderBy !== $oldOrderBy) {
+ $queryBuilderClone->add('orderBy', str_replace($aliases, $replacements, (string) $order), true);
+ }
+ }
+
return $queryBuilderClone;
}
}
diff --git a/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml b/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml
index ad6301b2bdf..b465a647b98 100644
--- a/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml
+++ b/src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml
@@ -143,6 +143,16 @@
+
+
+ %api_platform.collection.order%
+
+
+
+
+
+
+
@@ -150,7 +160,7 @@
%api_platform.eager_loading.force_eager%
-
+
@@ -162,14 +172,6 @@
-
-
- %api_platform.collection.order%
-
-
-
-
-
diff --git a/tests/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtensionTest.php b/tests/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtensionTest.php
index 50fc199e021..be02e1eca83 100644
--- a/tests/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtensionTest.php
+++ b/tests/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtensionTest.php
@@ -327,9 +327,9 @@ public function testGroupBy()
SELECT o_2 FROM ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\DummyCar o_2
LEFT JOIN o_2.colors colors_2
WHERE o_2.colors = :foo
+ ORDER BY o_2.colors ASC
)
GROUP BY o.colors HAVING counter > 3
-ORDER BY o.colors ASC
SQL;
$this->assertEquals($this->toDQLString($expected), $qb->getDQL());