Skip to content

Commit 98b9a02

Browse files
Merge pull request #1527 from jdeniau/jd-fix-allowAnotherQueryBuilderAlias
Allow another query builder alias
2 parents d7d78ab + cfffd4b commit 98b9a02

15 files changed

+86
-42
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -54,7 +54,7 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
5454
}
5555

5656
$joinParts = $queryBuilder->getDQLPart('join');
57-
$originAlias = 'o';
57+
$originAlias = $queryBuilder->getRootAliases()[0];
5858

5959
if (!$joinParts || !isset($joinParts[$originAlias])) {
6060
return;

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

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,8 @@ public function __construct(string $order = null, ResourceMetadataFactoryInterfa
4141
*/
4242
public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $resourceClass, string $operationName = null)
4343
{
44+
$rootAlias = $queryBuilder->getRootAliases()[0];
45+
4446
$classMetaData = $queryBuilder->getEntityManager()->getClassMetadata($resourceClass);
4547
$identifiers = $classMetaData->getIdentifier();
4648
if (null !== $this->resourceMetadataFactory) {
@@ -54,9 +56,9 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
5456
}
5557
if (false === ($pos = strpos($field, '.'))) {
5658
// Configure default filter with property
57-
$field = 'o.'.$field;
59+
$field = "{$rootAlias}.{$field}";
5860
} else {
59-
$alias = QueryBuilderHelper::addJoinOnce($queryBuilder, $queryNameGenerator, 'o', substr($field, 0, $pos));
61+
$alias = QueryBuilderHelper::addJoinOnce($queryBuilder, $queryNameGenerator, $rootAlias, substr($field, 0, $pos));
6062
$field = sprintf('%s.%s', $alias, substr($field, $pos + 1));
6163
}
6264
$queryBuilder->addOrderBy($field, $order);
@@ -68,7 +70,7 @@ public function applyToCollection(QueryBuilder $queryBuilder, QueryNameGenerator
6870

6971
if (null !== $this->order) {
7072
foreach ($identifiers as $identifier) {
71-
$queryBuilder->addOrderBy('o.'.$identifier, $this->order);
73+
$queryBuilder->addOrderBy("{$rootAlias}.{$identifier}", $this->order);
7274
}
7375
}
7476
}

src/Bridge/Doctrine/Orm/Filter/BooleanFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -89,7 +89,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
8989
return;
9090
}
9191

92-
$alias = 'o';
92+
$alias = $queryBuilder->getRootAliases()[0];
9393
$field = $property;
9494

9595
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/Filter/DateFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ protected function filterProperty(string $property, $values, QueryBuilder $query
8585
return;
8686
}
8787

88-
$alias = 'o';
88+
$alias = $queryBuilder->getRootAliases()[0];
8989
$field = $property;
9090

9191
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/Filter/ExistsFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -92,7 +92,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
9292
return;
9393
}
9494

95-
$alias = 'o';
95+
$alias = $queryBuilder->getRootAliases()[0];
9696
$field = $property;
9797

9898
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/Filter/NumericFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -111,7 +111,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
111111
return;
112112
}
113113

114-
$alias = 'o';
114+
$alias = $queryBuilder->getRootAliases()[0];
115115
$field = $property;
116116

117117
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/Filter/OrderFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -119,7 +119,7 @@ protected function filterProperty(string $property, $direction, QueryBuilder $qu
119119
return;
120120
}
121121

122-
$alias = 'o';
122+
$alias = $queryBuilder->getRootAliases()[0];
123123
$field = $property;
124124

125125
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/Filter/RangeFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ protected function filterProperty(string $property, $values, QueryBuilder $query
7070
return;
7171
}
7272

73-
$alias = 'o';
73+
$alias = $queryBuilder->getRootAliases()[0];
7474
$field = $property;
7575

7676
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/Filter/SearchFilter.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -184,7 +184,7 @@ protected function filterProperty(string $property, $value, QueryBuilder $queryB
184184
return;
185185
}
186186

187-
$alias = 'o';
187+
$alias = $queryBuilder->getRootAliases()[0];
188188
$field = $property;
189189

190190
if ($this->isPropertyNested($property, $resourceClass)) {

src/Bridge/Doctrine/Orm/ItemDataProvider.php

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -108,10 +108,11 @@ public function getItem(string $resourceClass, $id, string $operationName = null
108108
*/
109109
private function addWhereForIdentifiers(array $identifiers, QueryBuilder $queryBuilder, ClassMetadata $classMetadata)
110110
{
111+
$alias = $queryBuilder->getRootAliases()[0];
111112
foreach ($identifiers as $identifier => $value) {
112113
$placeholder = ':id_'.$identifier;
113114
$expression = $queryBuilder->expr()->eq(
114-
'o.'.$identifier,
115+
"{$alias}.{$identifier}",
115116
$placeholder
116117
);
117118

src/Bridge/Doctrine/Orm/Util/QueryBuilderHelper.php

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -58,12 +58,13 @@ public static function addJoinOnce(QueryBuilder $queryBuilder, QueryNameGenerato
5858
private static function getExistingJoin(QueryBuilder $queryBuilder, string $alias, string $association)
5959
{
6060
$parts = $queryBuilder->getDQLPart('join');
61+
$rootAlias = $queryBuilder->getRootAliases()[0];
6162

62-
if (!isset($parts['o'])) {
63+
if (!isset($parts[$rootAlias])) {
6364
return null;
6465
}
6566

66-
foreach ($parts['o'] as $join) {
67+
foreach ($parts[$rootAlias] as $join) {
6768
/** @var Join $join */
6869
if (sprintf('%s.%s', $alias, $association) === $join->getJoin()) {
6970
return $join;

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

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -123,6 +123,7 @@ public function testHasNoJoinPart()
123123
$qb = $this->prophesize(QueryBuilder::class);
124124
$qb->getDQLPart('where')->shouldBeCalled()->willReturn(new Expr\Andx());
125125
$qb->getDQLPart('join')->shouldBeCalled()->willReturn(null);
126+
$qb->getRootAliases()->shouldBeCalled()->willReturn(['o']);
126127
$qb->getEntityManager()->willReturn($em);
127128

128129
$queryNameGenerator = $this->prophesize(QueryNameGeneratorInterface::class);

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -41,6 +41,7 @@ public function testApplyToCollectionWithValidOrder()
4141
$emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal());
4242

4343
$queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal());
44+
$queryBuilderProphecy->getRootAliases()->shouldBeCalled()->willReturn(['o']);
4445

4546
$queryBuilder = $queryBuilderProphecy->reveal();
4647
$orderExtensionTest = new OrderExtension('asc');
@@ -60,6 +61,7 @@ public function testApplyToCollectionWithWrongOrder()
6061
$emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal());
6162

6263
$queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal());
64+
$queryBuilderProphecy->getRootAliases()->shouldBeCalled()->willReturn(['o']);
6365

6466
$queryBuilder = $queryBuilderProphecy->reveal();
6567
$orderExtensionTest = new OrderExtension();
@@ -82,6 +84,7 @@ public function testApplyToCollectionWithOrderOverridden()
8284
$emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal());
8385

8486
$queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal());
87+
$queryBuilderProphecy->getRootAliases()->shouldBeCalled()->willReturn(['o']);
8588

8689
$queryBuilder = $queryBuilderProphecy->reveal();
8790
$orderExtensionTest = new OrderExtension('asc', $resourceMetadataFactoryProphecy->reveal());
@@ -105,6 +108,7 @@ public function testApplyToCollectionWithOrderOverriddenWithNoDirection()
105108
$emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal());
106109

107110
$queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal());
111+
$queryBuilderProphecy->getRootAliases()->shouldBeCalled()->willReturn(['o']);
108112

109113
$queryBuilder = $queryBuilderProphecy->reveal();
110114
$orderExtensionTest = new OrderExtension('asc', $resourceMetadataFactoryProphecy->reveal());
@@ -129,6 +133,7 @@ public function testApplyToCollectionWithOrderOverriddenWithAssociation()
129133
$emProphecy->getClassMetadata(Dummy::class)->shouldBeCalled()->willReturn($classMetadataProphecy->reveal());
130134

131135
$queryBuilderProphecy->getEntityManager()->shouldBeCalled()->willReturn($emProphecy->reveal());
136+
$queryBuilderProphecy->getRootAliases()->shouldBeCalled()->willReturn(['o']);
132137

133138
$queryBuilder = $queryBuilderProphecy->reveal();
134139
$orderExtensionTest = new OrderExtension('asc', $resourceMetadataFactoryProphecy->reveal());

0 commit comments

Comments
 (0)