Fetch event option ID by a separate query instead of a subquery
[MAILPOET-2903]
This commit is contained in:
@ -60,20 +60,22 @@ class NewslettersRepository extends Repository {
|
|||||||
|
|
||||||
public function getAnalytics(): array {
|
public function getAnalytics(): array {
|
||||||
// for automatic emails join 'event' newsletter option to further group the counts
|
// for automatic emails join 'event' newsletter option to further group the counts
|
||||||
$eventOptionIdSubquery = $this->entityManager->createQueryBuilder()
|
$eventOptionId = (int)$this->entityManager->createQueryBuilder()
|
||||||
->select('nof.id')
|
->select('nof.id')
|
||||||
->from(NewsletterOptionFieldEntity::class, 'nof')
|
->from(NewsletterOptionFieldEntity::class, 'nof')
|
||||||
->andWhere('nof.newsletterType = :eventOptionFieldType')
|
->andWhere('nof.newsletterType = :eventOptionFieldType')
|
||||||
->andWhere('nof.name = :eventOptionFieldName')
|
->andWhere('nof.name = :eventOptionFieldName')
|
||||||
->getQuery();
|
->setParameter('eventOptionFieldType', NewsletterEntity::TYPE_AUTOMATIC)
|
||||||
|
->setParameter('eventOptionFieldName', 'event')
|
||||||
|
->getQuery()
|
||||||
|
->getSingleScalarResult();
|
||||||
|
|
||||||
$results = $this->doctrineRepository->createQueryBuilder('n')
|
$results = $this->doctrineRepository->createQueryBuilder('n')
|
||||||
->select('n.type, eventOption.value AS event, COUNT(n) AS cnt')
|
->select('n.type, eventOption.value AS event, COUNT(n) AS cnt')
|
||||||
->leftJoin('n.options', 'eventOption', Join::WITH, "eventOption.optionField = ({$eventOptionIdSubquery->getDQL()})")
|
->leftJoin('n.options', 'eventOption', Join::WITH, "eventOption.optionField = :eventOptionId")
|
||||||
->setParameter('eventOptionFieldType', NewsletterEntity::TYPE_AUTOMATIC)
|
|
||||||
->setParameter('eventOptionFieldName', 'event')
|
|
||||||
->andWhere('n.deletedAt IS NULL')
|
->andWhere('n.deletedAt IS NULL')
|
||||||
->andWhere('n.status IN (:statuses)')
|
->andWhere('n.status IN (:statuses)')
|
||||||
|
->setParameter('eventOptionId', $eventOptionId)
|
||||||
->setParameter('statuses', [NewsletterEntity::STATUS_ACTIVE, NewsletterEntity::STATUS_SENT])
|
->setParameter('statuses', [NewsletterEntity::STATUS_ACTIVE, NewsletterEntity::STATUS_SENT])
|
||||||
->groupBy('n.type, eventOption.value')
|
->groupBy('n.type, eventOption.value')
|
||||||
->getQuery()
|
->getQuery()
|
||||||
|
Reference in New Issue
Block a user