Nette\Database\Table\SqlBuilder::buildSelectQuery PHP Метод

buildSelectQuery() публичный Метод

Returns SQL query.
public buildSelectQuery ( $columns = NULL ) : string
Результат 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);
    }

Usage Example

Пример #1
0
 protected function execute()
 {
     if ($this->rows !== NULL) {
         return;
     }
     $this->observeCache = TRUE;
     try {
         $result = $this->query($this->sqlBuilder->buildSelectQuery());
     } catch (\PDOException $exception) {
         if (!$this->sqlBuilder->getSelect() && $this->prevAccessed) {
             $this->prevAccessed = '';
             $this->accessed = array();
             $result = $this->query($this->sqlBuilder->buildSelectQuery());
         } else {
             throw $exception;
         }
     }
     $this->rows = array();
     $result->setFetchMode(PDO::FETCH_ASSOC);
     foreach ($result as $key => $row) {
         $row = $result->normalizeRow($row);
         $this->rows[isset($row[$this->primary]) ? $row[$this->primary] : $key] = $this->createRow($row);
     }
     $this->data = $this->rows;
     if (isset($row[$this->primary]) && !is_string($this->accessed)) {
         $this->accessed[$this->primary] = TRUE;
     }
 }
All Usage Examples Of Nette\Database\Table\SqlBuilder::buildSelectQuery