diff --git a/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php b/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php index 35c13c6d5db..5092009efc2 100644 --- a/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php +++ b/src/Bridge/Doctrine/Orm/Extension/FilterEagerLoadingExtension.php @@ -138,10 +138,11 @@ private function getQueryBuilderWithNewAliases(QueryBuilder $queryBuilder, Query } $alias = substr($joinString, 0, $pos); $association = substr($joinString, $pos + 1); - $condition = str_replace($aliases, $replacements, $joinPart->getCondition()); - $newAlias = QueryBuilderHelper::addJoinOnce($queryBuilderClone, $queryNameGenerator, $alias, $association, $joinPart->getJoinType(), $joinPart->getConditionType(), $condition, $originAlias); + $newAlias = $queryNameGenerator->generateJoinAlias($association); $aliases[] = "{$joinPart->getAlias()}."; $replacements[] = "$newAlias."; + $condition = str_replace($aliases, $replacements, $joinPart->getCondition()); + QueryBuilderHelper::addJoinOnce($queryBuilderClone, $queryNameGenerator, $alias, $association, $joinPart->getJoinType(), $joinPart->getConditionType(), $condition, $originAlias, $newAlias); } $queryBuilderClone->add('where', str_replace($aliases, $replacements, (string) $wherePart)); diff --git a/src/Bridge/Doctrine/Orm/Util/QueryBuilderHelper.php b/src/Bridge/Doctrine/Orm/Util/QueryBuilderHelper.php index e6960d16739..0aad638ad6b 100644 --- a/src/Bridge/Doctrine/Orm/Util/QueryBuilderHelper.php +++ b/src/Bridge/Doctrine/Orm/Util/QueryBuilderHelper.php @@ -30,7 +30,7 @@ private function __construct() /** * Adds a join to the queryBuilder if none exists. */ - 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 + 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 $newAlias = null): string { $join = self::getExistingJoin($queryBuilder, $alias, $association, $originAlias); @@ -38,7 +38,7 @@ public static function addJoinOnce(QueryBuilder $queryBuilder, QueryNameGenerato return $join->getAlias(); } - $associationAlias = $queryNameGenerator->generateJoinAlias($association); + $associationAlias = $newAlias ?: $queryNameGenerator->generateJoinAlias($association); $query = "$alias.$association"; if (Join::LEFT_JOIN === $joinType || QueryChecker::hasLeftJoin($queryBuilder)) {