diff --git a/src/Bundle/Doctrine/ORM/ResourceRepositoryTrait.php b/src/Bundle/Doctrine/ORM/ResourceRepositoryTrait.php index 525a9bd31..9255f8354 100644 --- a/src/Bundle/Doctrine/ORM/ResourceRepositoryTrait.php +++ b/src/Bundle/Doctrine/ORM/ResourceRepositoryTrait.php @@ -47,12 +47,12 @@ public function remove(ResourceInterface $resource): void /** * @return iterable */ - public function createPaginator(array $criteria = [], array $sorting = []): iterable + public function createPaginator(array $criteria = [], array $sorting = [], string $alias = 'o'): iterable { - $queryBuilder = $this->createQueryBuilder('o'); + $queryBuilder = $this->createQueryBuilder($alias); - $this->applyCriteria($queryBuilder, $criteria); - $this->applySorting($queryBuilder, $sorting); + $this->applyCriteria($queryBuilder, $criteria, $alias); + $this->applySorting($queryBuilder, $sorting, $alias); return $this->getPaginator($queryBuilder); } @@ -71,14 +71,14 @@ protected function getArrayPaginator($objects): Pagerfanta return new Pagerfanta(new ArrayAdapter($objects)); } - protected function applyCriteria(QueryBuilder $queryBuilder, array $criteria = []): void + protected function applyCriteria(QueryBuilder $queryBuilder, array $criteria = [], string $alias = 'o'): void { foreach ($criteria as $property => $value) { if (!in_array($property, array_merge($this->_class->getAssociationNames(), $this->_class->getFieldNames()), true)) { continue; } - $name = $this->getPropertyName($property); + $name = $this->getPropertyName($property, $alias); if (null === $value) { $queryBuilder->andWhere($queryBuilder->expr()->isNull($name)); @@ -94,7 +94,7 @@ protected function applyCriteria(QueryBuilder $queryBuilder, array $criteria = [ } } - protected function applySorting(QueryBuilder $queryBuilder, array $sorting = []): void + protected function applySorting(QueryBuilder $queryBuilder, array $sorting = [], string $alias = 'o'): void { foreach ($sorting as $property => $order) { if (!in_array($property, array_merge($this->_class->getAssociationNames(), $this->_class->getFieldNames()), true)) { @@ -102,15 +102,15 @@ protected function applySorting(QueryBuilder $queryBuilder, array $sorting = []) } if (!empty($order)) { - $queryBuilder->addOrderBy($this->getPropertyName($property), $order); + $queryBuilder->addOrderBy($this->getPropertyName($property, $alias), $order); } } } - protected function getPropertyName(string $name): string + protected function getPropertyName(string $name, string $alias = 'o'): string { if (false === strpos($name, '.')) { - return 'o' . '.' . $name; + return $alias . '.' . $name; } return $name;