queryFactory = $queryFactory; $this->connectionFactory = $connectionFactory; $this->iteratorFactory = $iteratorFactory; } /** * Returns custom iterator name for report * Null for default * * @param Query $query * @return string|null */ private function getIteratorName(Query $query) { $config = $query->getConfig(); return $config['iterator'] ?? null; } /** * Returns report data by name and criteria * * @param string $name * @return \IteratorIterator */ public function getReport($name) { $query = $this->queryFactory->create($name); $connection = $this->connectionFactory->getConnection($query->getConnectionName()); $statement = $connection->query($query->getSelect()); return $this->iteratorFactory->create($statement, $this->getIteratorName($query)); } }