/** * Returns SQL query. * @param string list of columns * @return string */ public function buildSelectQuery($columns = NULL) { $queryCondition = $this->buildConditions(); $queryEnd = $this->buildQueryEnd(); $joins = []; $this->parseJoins($joins, $queryCondition); $this->parseJoins($joins, $queryEnd); if ($this->select) { $querySelect = $this->buildSelect($this->select); $this->parseJoins($joins, $querySelect); } elseif ($columns) { $prefix = $joins ? "{$this->delimitedTable}." : ''; $cols = []; foreach ($columns as $col) { $cols[] = $prefix . $col; } $querySelect = $this->buildSelect($cols); } elseif ($this->group && !$this->driver->isSupported(ISupplementalDriver::SUPPORT_SELECT_UNGROUPED_COLUMNS)) { $querySelect = $this->buildSelect([$this->group]); $this->parseJoins($joins, $querySelect); } else { $prefix = $joins ? "{$this->delimitedTable}." : ''; $querySelect = $this->buildSelect([$prefix . '*']); } $queryJoins = $this->buildQueryJoins($joins); $query = "{$querySelect} FROM {$this->delimitedTable}{$queryJoins}{$queryCondition}{$queryEnd}"; $this->driver->applyLimit($query, $this->limit, $this->offset); return $this->tryDelimite($query); }
/** * Returns SQL query. * @param string list of columns * @return string */ public function buildSelectQuery($columns = NULL) { if (!$this->order && ($this->limit !== NULL || $this->offset)) { $this->order = array_map(function ($col) { return "{$this->tableName}.{$col}"; }, (array) $this->conventions->getPrimary($this->tableName)); } $queryJoinConditions = $this->buildJoinConditions(); $queryCondition = $this->buildConditions(); $queryEnd = $this->buildQueryEnd(); $joins = []; $finalJoinConditions = $this->parseJoinConditions($joins, $queryJoinConditions); $this->parseJoins($joins, $queryCondition); $this->parseJoins($joins, $queryEnd); if ($this->select) { $querySelect = $this->buildSelect($this->select); $this->parseJoins($joins, $querySelect); } elseif ($columns) { $prefix = $joins ? "{$this->delimitedTable}." : ''; $cols = []; foreach ($columns as $col) { $cols[] = $prefix . $col; } $querySelect = $this->buildSelect($cols); } elseif ($this->group && !$this->driver->isSupported(ISupplementalDriver::SUPPORT_SELECT_UNGROUPED_COLUMNS)) { $querySelect = $this->buildSelect([$this->group]); $this->parseJoins($joins, $querySelect); } else { $prefix = $joins ? "{$this->delimitedTable}." : ''; $querySelect = $this->buildSelect([$prefix . '*']); } $queryJoins = $this->buildQueryJoins($joins, $finalJoinConditions); $query = "{$querySelect} FROM {$this->delimitedTable}{$queryJoins}{$queryCondition}{$queryEnd}"; $this->driver->applyLimit($query, $this->limit, $this->offset); return $this->tryDelimite($query); }