/** * @param ImapEmailFolder $imapFolder */ protected function clearFolder($imapFolder) { $folder = $imapFolder->getFolder(); $query = $this->em->getRepository('OroEmailBundle:EmailUser')->getEmailUserByFolder($folder)->getQuery(); $iterableResult = $query->iterate(); $i = 0; while (($row = $iterableResult->next()) !== false) { /** @var EmailUser $emailUser */ $emailUser = $row[0]; $email = $emailUser->getEmail(); $this->em->remove($emailUser); $imapEmails = $this->em->getRepository('OroImapBundle:ImapEmail')->findBy(['email' => $email, 'imapFolder' => $imapFolder]); foreach ($imapEmails as $imapEmail) { $this->em->remove($imapEmail); } if ($i % self::BATCH_SIZE === 0) { $this->em->flush(); $this->em->clear('OroEmailBundle:EmailUser'); $this->em->clear('OroImapBundle:ImapEmail'); } ++$i; } if ($i > 0) { $this->logger->notice(sprintf('ImapFolder with ID %s cleared. Removed %d emails.', $imapFolder->getId(), $i)); } $this->em->flush(); }
/** * @param ImapEmailFolder $imapFolder */ protected function clearFolder($imapFolder) { $folder = $imapFolder->getFolder(); $limit = self::BATCH_SIZE; $offset = 0; $i = 0; while ($result = $this->em->getRepository('OroEmailBundle:EmailUser')->getEmailUserByFolder($folder, $limit, $offset)->getQuery()->getResult()) { foreach ($result as $emailUser) { /** @var EmailUser $emailUser */ $emailUser->removeFolder($folder); $email = $emailUser->getEmail(); if ($emailUser->getFolders()->isEmpty()) { $this->em->remove($emailUser); } $imapEmails = $this->em->getRepository('OroImapBundle:ImapEmail')->findBy(['email' => $email, 'imapFolder' => $imapFolder]); foreach ($imapEmails as $imapEmail) { $this->em->remove($imapEmail); } ++$i; } $this->em->flush(); $this->cleanUp(); } if ($i > 0) { $this->logger->notice(sprintf('ImapFolder with ID %s cleared. Removed %d emails.', $imapFolder->getId(), $i)); } $this->em->flush(); $this->cleanUp(); }