/** * Transforms a fully-built query builder into a row collection with the results * * @param QueryBuilder $queryBuilder * * @param Query $query * @param DataSourceInterface $dataSource * * @return array * @throws ColumnNotSelectedException * @throws \Netdudes\DataSourceryBundle\DataSource\Driver\Doctrine\Exception\ColumnNotFoundException * */ protected function fetchData(QueryBuilder $queryBuilder, Query $query, DataSourceInterface $dataSource) { $fields = $dataSource->getFields(); $rowCollection = []; $queryResults = $queryBuilder->getQuery()->getResult(); foreach ($queryResults as $queryResultsRow) { $row = []; foreach ($fields as $queryBuilderDataSourceField) { if (!in_array($queryBuilderDataSourceField->getUniqueName(), $query->getSelect(), true)) { continue; } $row[$queryBuilderDataSourceField->getUniqueName()] = $this->getCellValueByDataSourceField($queryResultsRow, $queryBuilderDataSourceField, $fields); } $rowCollection[] = $row; } $event = new PostFetchEvent($dataSource, $rowCollection); $dataSource->getEventDispatcher()->dispatch(self::EVENT_POST_FETCH, $event); return $event->data; }