Skip to content

Commit e3a3450

Browse files
authored
Merge 9510ae3 into e8f26ca
2 parents e8f26ca + 9510ae3 commit e3a3450

File tree

3 files changed

+27
-10
lines changed

3 files changed

+27
-10
lines changed

src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php

Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -72,6 +72,7 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
7272
$queryBuilderClone = clone $queryBuilder;
7373
$queryBuilderClone->resetDQLPart('where');
7474
$changedWhereClause = false;
75+
$in = null;
7576

7677
if (!$classMetadata->isIdentifierComposite) {
7778
$replacementAlias = $queryNameGenerator->generateJoinAlias($originAlias);
@@ -98,6 +99,10 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
9899
return;
99100
}
100101

102+
if (\count($in->getDQLPart('orderBy')) === \count($queryBuilder->getDQLPart('orderBy'))) {
103+
$queryBuilder->resetDQLPart('orderBy');
104+
}
105+
101106
$queryBuilder->resetDQLPart('where');
102107
$queryBuilder->add('where', $queryBuilderClone->getDQLPart('where'));
103108
}
@@ -114,6 +119,7 @@ private function getQueryBuilderWithNewAliases(QueryBuilder $queryBuilder, Query
114119

115120
$joinParts = $queryBuilder->getDQLPart('join');
116121
$wherePart = $queryBuilder->getDQLPart('where');
122+
$orderByPart = $queryBuilder->getDQLPart('orderBy');
117123

118124
//reset parts
119125
$queryBuilderClone->resetDQLPart('join');
@@ -158,6 +164,15 @@ private function getQueryBuilderWithNewAliases(QueryBuilder $queryBuilder, Query
158164

159165
$queryBuilderClone->add('where', str_replace($aliases, $replacements, (string) $wherePart));
160166

167+
foreach ($orderByPart as $order) {
168+
$oldOrderBy = (string) $order;
169+
$newOrderBy = str_replace($aliases, $replacements, $oldOrderBy);
170+
171+
if ($newOrderBy !== $oldOrderBy) {
172+
$queryBuilderClone->add('orderBy', str_replace($aliases, $replacements, (string) $order), true);
173+
}
174+
}
175+
161176
return $queryBuilderClone;
162177
}
163178
}

src/Bridge/Symfony/Bundle/Resources/config/doctrine_orm.xml

Lines changed: 11 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -143,14 +143,24 @@
143143
</service>
144144
<service id="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\FilterExtension" alias="api_platform.doctrine.orm.query_extension.filter" />
145145

146+
147+
<service id="api_platform.doctrine.orm.query_extension.order" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\OrderExtension" public="false">
148+
<argument>%api_platform.collection.order%</argument>
149+
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
150+
151+
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-17" />
152+
</service>
153+
<service id="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\OrderExtension" alias="api_platform.doctrine.orm.query_extension.order" />
154+
155+
146156
<!-- This needs to be executed right after the filter extension -->
147157

148158
<service id="api_platform.doctrine.orm.query_extension.filter_eager_loading" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\FilterEagerLoadingExtension" public="false">
149159
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
150160
<argument>%api_platform.eager_loading.force_eager%</argument>
151161
<argument type="service" id="api_platform.resource_class_resolver" />
152162

153-
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-17" />
163+
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-18" />
154164
</service>
155165
<service id="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\FilterEagerLoadingExtension" alias="api_platform.doctrine.orm.query_extension.filter_eager_loading" />
156166

@@ -162,14 +172,6 @@
162172
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-64" />
163173
</service>
164174
<service id="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\PaginationExtension" alias="api_platform.doctrine.orm.query_extension.pagination" />
165-
166-
<service id="api_platform.doctrine.orm.query_extension.order" class="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\OrderExtension" public="false">
167-
<argument>%api_platform.collection.order%</argument>
168-
<argument type="service" id="api_platform.metadata.resource.metadata_factory" />
169-
170-
<tag name="api_platform.doctrine.orm.query_extension.collection" priority="-32" />
171-
</service>
172-
<service id="ApiPlatform\Core\Bridge\Doctrine\Orm\Extension\OrderExtension" alias="api_platform.doctrine.orm.query_extension.order" />
173175
</services>
174176

175177
</container>

tests/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtensionTest.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -327,9 +327,9 @@ public function testGroupBy()
327327
SELECT o_2 FROM ApiPlatform\Core\Tests\Fixtures\TestBundle\Entity\DummyCar o_2
328328
LEFT JOIN o_2.colors colors_2
329329
WHERE o_2.colors = :foo
330+
ORDER BY o_2.colors ASC
330331
)
331332
GROUP BY o.colors HAVING counter > 3
332-
ORDER BY o.colors ASC
333333
SQL;
334334

335335
$this->assertEquals($this->toDQLString($expected), $qb->getDQL());

0 commit comments

Comments
 (0)