Skip to content

Commit ae87b81

Browse files
Fix count request for DoctrineAdapter and use Doctrine Paginator
1 parent 0f4cd12 commit ae87b81

File tree

3 files changed

+6
-5
lines changed

3 files changed

+6
-5
lines changed

src/Adapter/Doctrine/DoctrineAdapter.php

+3-2
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,7 @@
1515

1616
use Doctrine\ORM\EntityManagerInterface;
1717
use Doctrine\ORM\QueryBuilder;
18+
use Doctrine\ORM\Tools\Pagination\Paginator;
1819
use Mezcalito\UxSearchBundle\Adapter\AdapterInterface;
1920
use Mezcalito\UxSearchBundle\Search\Filter\RangeFilter;
2021
use Mezcalito\UxSearchBundle\Search\Filter\TermFilter;
@@ -44,9 +45,9 @@ public function search(Query $query, SearchInterface $search): ResultSet
4445
{
4546
$helper = new QueryBuilderHelper($this->manager, $query, $search);
4647

47-
$results = $helper->getResultsQuery()->getQuery()->getResult();
48+
$paginator = new Paginator($helper->getResultsQuery()->getQuery(), fetchJoinCollection: true);
4849
$hits = [];
49-
foreach ($results as $item) {
50+
foreach ($paginator as $item) {
5051
$hits[] = new Hit($item, 1);
5152
}
5253

src/Adapter/Doctrine/QueryBuilderHelper.php

+1-1
Original file line numberDiff line numberDiff line change
@@ -36,7 +36,7 @@ public function __construct(
3636
public function getTotalResultsQuery(): QueryBuilder
3737
{
3838
$qb = $this->createBaseQueryBuilder()
39-
->select(\sprintf('count(%s) AS total', $this->getIdentifierField()));
39+
->select(\sprintf('count(DISTINCT (%s)) AS total', $this->getIdentifierField()));
4040

4141
$this->applyQueryString($qb);
4242

tests/Adapter/Doctrine/QueryBuilderHelperTest.php

+2-2
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@ public function testTotalResultsQuery()
3232
{
3333
$dql = $this->helper->getTotalResultsQuery()->getQuery()->getDQL();
3434

35-
$this->assertEquals('SELECT count(o.id) AS total FROM Mezcalito\UxSearchBundle\Tests\Fixtures\Adapter\Doctrine\Foo o', $dql);
35+
$this->assertEquals('SELECT count(DISTINCT (o.id)) AS total FROM Mezcalito\UxSearchBundle\Tests\Fixtures\Adapter\Doctrine\Foo o', $dql);
3636
}
3737

3838
public function testTotalResultsWithFilterQuery()
@@ -43,7 +43,7 @@ public function testTotalResultsWithFilterQuery()
4343
$dql = $qb->getQuery()->getDQL();
4444
$params = $qb->getParameter('o_brand_terms');
4545

46-
$this->assertEquals('SELECT count(o.id) AS total FROM Mezcalito\UxSearchBundle\Tests\Fixtures\Adapter\Doctrine\Foo o WHERE o.brand in (:o_brand_terms)', $dql);
46+
$this->assertEquals('SELECT count(DISTINCT (o.id)) AS total FROM Mezcalito\UxSearchBundle\Tests\Fixtures\Adapter\Doctrine\Foo o WHERE o.brand in (:o_brand_terms)', $dql);
4747
$this->assertEquals(['A', 'B'], $params->getValue());
4848
}
4949

0 commit comments

Comments
 (0)