Fix getting segment count with multiple filters for empty table
Method getSingleScalarResult throws an exception when a query returns no rows. I used the method getOneOrNullResult instead. [MAILPOET-3902]
This commit is contained in:
@@ -15,6 +15,7 @@ use MailPoet\WP\Functions as WPFunctions;
|
|||||||
use MailPoetVendor\Carbon\Carbon;
|
use MailPoetVendor\Carbon\Carbon;
|
||||||
use MailPoetVendor\Doctrine\DBAL\Connection;
|
use MailPoetVendor\Doctrine\DBAL\Connection;
|
||||||
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
use MailPoetVendor\Doctrine\ORM\EntityManager;
|
||||||
|
use MailPoetVendor\Doctrine\ORM\Query;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @extends Repository<SegmentEntity>
|
* @extends Repository<SegmentEntity>
|
||||||
@@ -227,11 +228,12 @@ class SegmentsRepository extends Repository {
|
|||||||
*/
|
*/
|
||||||
public function getSegmentCountWithMultipleFilters(): int {
|
public function getSegmentCountWithMultipleFilters(): int {
|
||||||
$qb = $this->entityManager->createQueryBuilder()
|
$qb = $this->entityManager->createQueryBuilder()
|
||||||
->select('COUNT(DISTINCT s.id)')
|
->select('COUNT(DISTINCT s.id) AS segmentCount')
|
||||||
->from(SegmentEntity::class, 's')
|
->from(SegmentEntity::class, 's')
|
||||||
->join('s.dynamicFilters', 'ds')
|
->join('s.dynamicFilters', 'ds')
|
||||||
->groupBy('ds.segment')
|
->groupBy('ds.segment')
|
||||||
->having('COUNT(ds.id) > 1');
|
->having('COUNT(ds.id) > 1');
|
||||||
return (int)$qb->getQuery()->getSingleScalarResult();
|
$result = $qb->getQuery()->getOneOrNullResult(Query::HYDRATE_ARRAY);
|
||||||
|
return (int)($result['segmentCount'] ?? 0);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user