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:
Jan Lysý
2021-11-01 14:36:56 +01:00
committed by Veljko V
parent c13ad00e64
commit e828546fa9

View File

@@ -15,6 +15,7 @@ use MailPoet\WP\Functions as WPFunctions;
use MailPoetVendor\Carbon\Carbon;
use MailPoetVendor\Doctrine\DBAL\Connection;
use MailPoetVendor\Doctrine\ORM\EntityManager;
use MailPoetVendor\Doctrine\ORM\Query;
/**
* @extends Repository<SegmentEntity>
@@ -227,11 +228,12 @@ class SegmentsRepository extends Repository {
*/
public function getSegmentCountWithMultipleFilters(): int {
$qb = $this->entityManager->createQueryBuilder()
->select('COUNT(DISTINCT s.id)')
->select('COUNT(DISTINCT s.id) AS segmentCount')
->from(SegmentEntity::class, 's')
->join('s.dynamicFilters', 'ds')
->groupBy('ds.segment')
->having('COUNT(ds.id) > 1');
return (int)$qb->getQuery()->getSingleScalarResult();
$result = $qb->getQuery()->getOneOrNullResult(Query::HYDRATE_ARRAY);
return (int)($result['segmentCount'] ?? 0);
}
}