/** * Build and returns Query for select rows * @param \Doctrine\ORM\QueryBuilder $queryBuilder * @param \EMC\TableBundle\Provider\QueryConfigInterface $queryConfig * @param array $mapping * @return \Doctrine\ORM\Query */ private function getQueryRows(QueryBuilder $queryBuilder, QueryConfigInterface $queryConfig, array &$mapping) { $queryBuilder->resetDQLPart('select'); $limit = $queryConfig->getLimit(); $page = $queryConfig->getPage(); $select = $queryConfig->getSelect(); $orderBy = $queryConfig->getOrderBy(); if ($limit > 0) { $queryBuilder->setMaxResults($limit)->setFirstResult(($page - 1) * $limit); } $mapping = array_map(function ($i) { return 'col' . $i; }, array_flip($select)); foreach ($mapping as $column => $name) { $queryBuilder->addSelect($column . ' AS ' . $name); } if (count($orderBy) === 0) { $queryBuilder->orderBy($queryBuilder->getRootAlias() . '.id', 'ASC'); } else { foreach ($orderBy as $column => $isAsc) { $queryBuilder->orderBy($column, $isAsc ? 'ASC' : 'DESC'); } } return $queryBuilder->getQuery(); }