diff --git a/src/Orm/EntityRepository.php b/src/Orm/EntityRepository.php index 3c724068e2..de0a3b4155 100644 --- a/src/Orm/EntityRepository.php +++ b/src/Orm/EntityRepository.php @@ -82,6 +82,7 @@ private function addSearchClause(QueryBuilder $queryBuilder, SearchDto $searchDt ]; $entitiesAlreadyJoined = []; + $entityAliases = []; $configuredSearchableProperties = $searchDto->getSearchableProperties(); $searchableProperties = (null === $configuredSearchableProperties || 0 === \count($configuredSearchableProperties)) ? $entityDto->getAllPropertyNames() : $configuredSearchableProperties; foreach ($searchableProperties as $propertyName) { @@ -101,13 +102,16 @@ private function addSearchClause(QueryBuilder $queryBuilder, SearchDto $searchDt $associatedEntityAlias = $associatedPropertyName = ''; for ($i = 0; $i < $numAssociatedProperties - 1; ++$i) { $associatedEntityName = $associatedProperties[$i]; - $associatedEntityAlias = Escaper::escapeDqlAlias($associatedEntityName); + $associatedEntityPath = implode('.', \array_slice($associatedProperties, 0, $i + 1)); + $associatedEntityAlias = '__ea_alias_'.\count($entityAliases); + $entityAliases[$associatedEntityPath] = $associatedEntityAlias; $associatedPropertyName = $associatedProperties[$i + 1]; - if (!\in_array($associatedEntityName, $entitiesAlreadyJoined, true)) { - $parentEntityName = 0 === $i ? 'entity' : $associatedProperties[$i - 1]; + if (!\in_array($associatedEntityPath, $entitiesAlreadyJoined, true)) { + $associatedEntityParentPath = implode('.', \array_slice($associatedProperties, 0, $i)); + $parentEntityName = 0 === $i ? 'entity' : $entityAliases[$associatedEntityParentPath]; $queryBuilder->leftJoin($parentEntityName.'.'.$associatedEntityName, $associatedEntityAlias); - $entitiesAlreadyJoined[] = $associatedEntityName; + $entitiesAlreadyJoined[] = $associatedEntityPath; } if ($i < $numAssociatedProperties - 2) {