/** * @return string * * @throws \Doctrine\DBAL\Query\QueryException */ protected function getSQLForSelect() { $query = 'SELECT ' . implode(', ', $this->sqlParts['select']) . ' FROM '; $fromClauses = array(); $knownAliases = array(); // Loop through all FROM clauses foreach ($this->sqlParts['from'] as $from) { $knownAliases[$from['alias']] = true; $fromClause = $from['table'] . ' ' . $from['alias'] . $this->getSQLForJoins($from['alias'], $knownAliases); $fromClauses[$from['alias']] = $fromClause; } foreach ($this->sqlParts['join'] as $fromAlias => $joins) { if (!isset($knownAliases[$fromAlias])) { throw QueryException::unknownAlias($fromAlias, array_keys($knownAliases)); } } $query .= implode(', ', $fromClauses) . ($this->sqlParts['where'] !== null ? ' WHERE ' . (string) $this->sqlParts['where'] : '') . ($this->sqlParts['groupBy'] ? ' GROUP BY ' . implode(', ', $this->sqlParts['groupBy']) : '') . ($this->sqlParts['having'] !== null ? ' HAVING ' . (string) $this->sqlParts['having'] : '') . ($this->sqlParts['orderBy'] ? ' ORDER BY ' . implode(', ', $this->sqlParts['orderBy']) : ''); return $this->maxResults === null && $this->firstResult == null ? $query : $this->connection->getDatabasePlatform()->modifyLimitQuery($query, $this->maxResults, $this->firstResult); }