Fetch event option ID by a separate query instead of a subquery

[MAILPOET-2903]
This commit is contained in:
Jan Jakeš
2020-05-27 11:15:11 +02:00
committed by Veljko V
parent 47ccd0d3ea
commit d3fe716578

View File

@ -60,20 +60,22 @@ class NewslettersRepository extends Repository {
public function getAnalytics(): array {
// for automatic emails join 'event' newsletter option to further group the counts
$eventOptionIdSubquery = $this->entityManager->createQueryBuilder()
$eventOptionId = (int)$this->entityManager->createQueryBuilder()
->select('nof.id')
->from(NewsletterOptionFieldEntity::class, 'nof')
->andWhere('nof.newsletterType = :eventOptionFieldType')
->andWhere('nof.name = :eventOptionFieldName')
->getQuery();
->setParameter('eventOptionFieldType', NewsletterEntity::TYPE_AUTOMATIC)
->setParameter('eventOptionFieldName', 'event')
->getQuery()
->getSingleScalarResult();
$results = $this->doctrineRepository->createQueryBuilder('n')
->select('n.type, eventOption.value AS event, COUNT(n) AS cnt')
->leftJoin('n.options', 'eventOption', Join::WITH, "eventOption.optionField = ({$eventOptionIdSubquery->getDQL()})")
->setParameter('eventOptionFieldType', NewsletterEntity::TYPE_AUTOMATIC)
->setParameter('eventOptionFieldName', 'event')
->leftJoin('n.options', 'eventOption', Join::WITH, "eventOption.optionField = :eventOptionId")
->andWhere('n.deletedAt IS NULL')
->andWhere('n.status IN (:statuses)')
->setParameter('eventOptionId', $eventOptionId)
->setParameter('statuses', [NewsletterEntity::STATUS_ACTIVE, NewsletterEntity::STATUS_SENT])
->groupBy('n.type, eventOption.value')
->getQuery()