Skip to content

Commit b0dbe4a

Browse files
committed
fix bc break regaring the FilterEagerLoadingExtension
1 parent 7bdead7 commit b0dbe4a

File tree

3 files changed

+72
-5
lines changed

3 files changed

+72
-5
lines changed

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

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -138,7 +138,7 @@ private function getQueryBuilderWithNewAliases(QueryBuilder $queryBuilder, Query
138138
$alias = substr($joinString, 0, $pos);
139139
$association = substr($joinString, $pos + 1);
140140
$condition = str_replace($aliases, $replacements, $joinPart->getCondition());
141-
$newAlias = QueryBuilderHelper::addJoinOnce($queryBuilderClone, $queryNameGenerator, $alias, $association, $joinPart->getJoinType(), $joinPart->getConditionType(), $condition);
141+
$newAlias = QueryBuilderHelper::addJoinOnce($queryBuilderClone, $queryNameGenerator, $alias, $association, $joinPart->getJoinType(), $joinPart->getConditionType(), $condition, $originAlias);
142142
$aliases[] = "{$joinPart->getAlias()}.";
143143
$replacements[] = "$newAlias.";
144144
}

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

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -30,9 +30,9 @@ private function __construct()
3030
/**
3131
* Adds a join to the queryBuilder if none exists.
3232
*/
33-
public static function addJoinOnce(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $alias, string $association, string $joinType = null, string $conditionType = null, string $condition = null): string
33+
public static function addJoinOnce(QueryBuilder $queryBuilder, QueryNameGeneratorInterface $queryNameGenerator, string $alias, string $association, string $joinType = null, string $conditionType = null, string $condition = null, string $originAlias = null): string
3434
{
35-
$join = self::getExistingJoin($queryBuilder, $alias, $association);
35+
$join = self::getExistingJoin($queryBuilder, $alias, $association, $originAlias);
3636

3737
if (null !== $join) {
3838
return $join->getAlias();
@@ -55,10 +55,10 @@ public static function addJoinOnce(QueryBuilder $queryBuilder, QueryNameGenerato
5555
*
5656
* @return Join|null
5757
*/
58-
private static function getExistingJoin(QueryBuilder $queryBuilder, string $alias, string $association)
58+
private static function getExistingJoin(QueryBuilder $queryBuilder, string $alias, string $association, string $originAlias = null)
5959
{
6060
$parts = $queryBuilder->getDQLPart('join');
61-
$rootAlias = $queryBuilder->getRootAliases()[0];
61+
$rootAlias = $originAlias ?? $queryBuilder->getRootAliases()[0];
6262

6363
if (!isset($parts[$rootAlias])) {
6464
return null;
Lines changed: 67 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,67 @@
1+
<?php
2+
3+
/*
4+
* This file is part of the API Platform project.
5+
*
6+
* (c) Kévin Dunglas <[email protected]>
7+
*
8+
* For the full copyright and license information, please view the LICENSE
9+
* file that was distributed with this source code.
10+
*/
11+
12+
declare(strict_types=1);
13+
14+
namespace ApiPlatform\Core\Tests\Bridge\Doctrine\Orm\Util;
15+
16+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryBuilderHelper;
17+
use ApiPlatform\Core\Bridge\Doctrine\Orm\Util\QueryNameGeneratorInterface;
18+
use Doctrine\ORM\EntityManagerInterface;
19+
use Doctrine\ORM\QueryBuilder;
20+
use PHPUnit\Framework\TestCase;
21+
22+
class QueryBuilderHelperTest extends TestCase
23+
{
24+
/**
25+
* @dataProvider provideAddJoinOnce
26+
*
27+
* @param string|null $originAlias
28+
*/
29+
public function testAddJoinOnce(string $originAliasForJoinOnce = null, string $expectedAlias)
30+
{
31+
$queryBuilder = new QueryBuilder($this->prophesize(EntityManagerInterface::class)->reveal());
32+
$queryBuilder->from('foo', 'f');
33+
$queryBuilder->from('foo', 'f2');
34+
$queryBuilder->join('f.bar', 'b');
35+
$queryBuilder->join('f2.bar', 'b2');
36+
37+
$queryNameGenerator = $this->prophesize(QueryNameGeneratorInterface::class);
38+
39+
QueryBuilderHelper::addJoinOnce(
40+
$queryBuilder,
41+
$queryNameGenerator->reveal(),
42+
$originAliasForJoinOnce ?? 'f',
43+
'bar',
44+
null,
45+
null,
46+
null,
47+
$originAliasForJoinOnce
48+
);
49+
50+
$this->assertSame($expectedAlias,
51+
$queryBuilder->getDQLPart('join')[$originAliasForJoinOnce ?? 'f'][0]->getAlias());
52+
}
53+
54+
public function provideAddJoinOnce(): array
55+
{
56+
return [
57+
[
58+
null,
59+
'b',
60+
],
61+
[
62+
'f2',
63+
'b2',
64+
],
65+
];
66+
}
67+
}

0 commit comments

Comments
 (0)