/**
  * @param AbstractQuery $query
  *
  * @throws \LogicException
  * @return int
  *
  */
 public function cleanByQuery(AbstractQuery $query)
 {
     $numCleaned = 0;
     /** @var SourceInterface $source */
     foreach ($query->iterate() as list($source)) {
         if (!$source instanceof SourceInterface) {
             throw new \LogicException(sprintf('Invalid iterator given, encountered %s instead of SourceInterface', is_object($source) ? get_class($source) : gettype($source)));
         }
         $this->eventDispatcher->dispatch(IoEvents::PRE_CLEAN_SOURCE, new SourceEvent($source));
         $this->sourceManager->remove($source);
         $this->eventDispatcher->dispatch(IoEvents::POST_CLEAN_SOURCE, new SourceEvent($source));
         ++$numCleaned;
         if ($numCleaned % 50 === 0) {
             $this->sourceManager->flush();
             $this->sourceManager->clear();
         }
     }
     if ($numCleaned > 0) {
         $this->sourceManager->flush();
         $this->sourceManager->clear();
     }
     return $numCleaned;
 }
Ejemplo n.º 2
0
 /**
  * Executes the query and returns an IterableResult that can be used to incrementally
  * iterated over the result.
  *
  * @param array $params The query parameters.
  * @param integer $hydrationMode The hydration mode to use.
  * @return \Doctrine\ORM\Internal\Hydration\IterableResult
  */
 public function iterate(array $params = array(), $hydrationMode = self::HYDRATE_OBJECT)
 {
     $this->setHint(self::HINT_INTERNAL_ITERATION, true);
     return parent::iterate($params, $hydrationMode);
 }
 /**
  * @param AbstractQuery $query
  * @param int           $batchSize
  *
  * @return self
  */
 public static function fromQuery(AbstractQuery $query, $batchSize)
 {
     return new self($query->iterate(), $query->getEntityManager(), $batchSize);
 }