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\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);
} }
} }