diff --git a/mailpoet/lib/Newsletter/NewsletterPostsRepository.php b/mailpoet/lib/Newsletter/NewsletterPostsRepository.php index 73db453464..69bc61c4ca 100644 --- a/mailpoet/lib/Newsletter/NewsletterPostsRepository.php +++ b/mailpoet/lib/Newsletter/NewsletterPostsRepository.php @@ -12,4 +12,20 @@ class NewsletterPostsRepository extends Repository { protected function getEntityClassName() { return NewsletterPostEntity::class; } + + /** @param int[] $ids */ + public function deleteByNewsletterIds(array $ids): void { + $this->entityManager->createQueryBuilder() + ->delete(NewsletterPostEntity::class, 'p') + ->where('p.newsletter IN (:ids)') + ->setParameter('ids', $ids) + ->getQuery() + ->execute(); + + // delete was done via DQL, make sure the entities are also detached from the entity manager + $this->detachAll(function (NewsletterPostEntity $entity) use ($ids) { + $newsletter = $entity->getNewsletter(); + return $newsletter && in_array($newsletter->getId(), $ids, true); + }); + } } diff --git a/mailpoet/lib/Newsletter/NewslettersRepository.php b/mailpoet/lib/Newsletter/NewslettersRepository.php index ce1b55c71b..4b46b7167d 100644 --- a/mailpoet/lib/Newsletter/NewslettersRepository.php +++ b/mailpoet/lib/Newsletter/NewslettersRepository.php @@ -38,6 +38,7 @@ use MailPoetVendor\Doctrine\ORM\Query\Expr\Join; */ class NewslettersRepository extends Repository { private LoggerFactory $loggerFactory; + private NewsletterPostsRepository $newsletterPostsRepository; private StatisticsClicksRepository $statisticsClicksRepository; private StatisticsNewslettersRepository $statisticsNewslettersRepository; private StatisticsOpensRepository $statisticsOpensRepository; @@ -45,6 +46,7 @@ class NewslettersRepository extends Repository { public function __construct( EntityManager $entityManager, + NewsletterPostsRepository $newsletterPostsRepository, StatisticsClicksRepository $statisticsClicksRepository, StatisticsNewslettersRepository $statisticsNewslettersRepository, StatisticsOpensRepository $statisticsOpensRepository, @@ -52,6 +54,7 @@ class NewslettersRepository extends Repository { ) { parent::__construct($entityManager); $this->loggerFactory = LoggerFactory::getInstance(); + $this->newsletterPostsRepository = $newsletterPostsRepository; $this->statisticsClicksRepository = $statisticsClicksRepository; $this->statisticsNewslettersRepository = $statisticsNewslettersRepository; $this->statisticsOpensRepository = $statisticsOpensRepository; @@ -399,11 +402,7 @@ class NewslettersRepository extends Repository { ", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]); // Delete newsletter posts - $postsTable = $entityManager->getClassMetadata(NewsletterPostEntity::class)->getTableName(); - $entityManager->getConnection()->executeStatement(" - DELETE np FROM $postsTable np - WHERE np.`newsletter_id` IN (:ids) - ", ['ids' => $ids], ['ids' => Connection::PARAM_INT_ARRAY]); + $this->newsletterPostsRepository->deleteByNewsletterIds($ids); // Delete newsletter options $optionsTable = $entityManager->getClassMetadata(NewsletterOptionEntity::class)->getTableName();