diff --git a/src/Datagrid/ProxyQuery.php b/src/Datagrid/ProxyQuery.php index fbb06d85b..6353eb06b 100644 --- a/src/Datagrid/ProxyQuery.php +++ b/src/Datagrid/ProxyQuery.php @@ -18,6 +18,7 @@ use Doctrine\ORM\EntityManager; use Doctrine\ORM\Query; use Doctrine\ORM\QueryBuilder; +use Doctrine\ORM\Tools\Pagination\Paginator; /** * This class try to unify the query usage with Doctrine. @@ -205,7 +206,23 @@ public function execute(array $params = [], $hydrationMode = null) $query->setHint($name, $value); } - return $query->execute($params, $hydrationMode); + // NEXT_MAJOR: Remove this. + if (\func_num_args() > 0) { + return $query->execute($params, $hydrationMode); + } + + $identifierFieldNames = $this + ->getQueryBuilder() + ->getEntityManager() + ->getMetadataFactory() + ->getMetadataFor(current($this->getQueryBuilder()->getRootEntities())) + ->getIdentifierFieldNames(); + + // Paginator with fetchJoinCollection doesn't work with composite primary keys + // https://github.com/doctrine/orm/issues/2910 + $paginator = new Paginator($query, 1 === \count($identifierFieldNames)); + + return $paginator->getIterator(); } /** diff --git a/tests/Datagrid/ProxyQueryTest.php b/tests/Datagrid/ProxyQueryTest.php index 8ca850201..8918d4235 100644 --- a/tests/Datagrid/ProxyQueryTest.php +++ b/tests/Datagrid/ProxyQueryTest.php @@ -142,7 +142,7 @@ public function testExecuteWithOrderBy(): void ['id' => 2], ['id' => 3], ], - $query->execute() + iterator_to_array($query->execute()) ); $query2 = new ProxyQuery( @@ -156,7 +156,7 @@ public function testExecuteWithOrderBy(): void ['id' => 1], ['id' => 3], ], - $query2->execute() + iterator_to_array($query2->execute()) ); } }