Prefetch options & segments for listing

[MAILPOET-2645]
This commit is contained in:
Jan Jakeš
2020-03-04 15:46:34 +01:00
committed by Jack Kitterhing
parent f3525eb293
commit 2cc1caba07

View File

@ -92,6 +92,8 @@ class NewslettersResponseBuilder {
public function buildForListing(array $newsletters): array { public function buildForListing(array $newsletters): array {
$statistics = $this->newslettersStatsRepository->getBatchStatistics($newsletters); $statistics = $this->newslettersStatsRepository->getBatchStatistics($newsletters);
$latestQueues = $this->getBatchLatestQueuesWithTasks($newsletters); $latestQueues = $this->getBatchLatestQueuesWithTasks($newsletters);
$this->prefetchOptions($newsletters);
$this->prefetchSegments($newsletters);
$data = []; $data = [];
foreach ($newsletters as $newsletter) { foreach ($newsletters as $newsletter) {
@ -229,4 +231,28 @@ class NewslettersResponseBuilder {
} }
return $latestQueues; return $latestQueues;
} }
private function prefetchOptions(array $newsletters) {
$this->entityManager->createQueryBuilder()
->select('PARTIAL n.{id}, o, opf')
->from(NewsletterEntity::class, 'n')
->join('n.options', 'o')
->join('o.optionField', 'opf')
->where('n.id IN (:newsletters)')
->setParameter('newsletters', $newsletters)
->getQuery()
->getResult();
}
private function prefetchSegments(array $newsletters) {
$this->entityManager->createQueryBuilder()
->select('PARTIAL n.{id}, ns, s')
->from(NewsletterEntity::class, 'n')
->join('n.newsletterSegments', 'ns')
->join('ns.segment', 's')
->where('n.id IN (:newsletters)')
->setParameter('newsletters', $newsletters)
->getQuery()
->getResult();
}
} }