yii\db\QueryBuilder::buildSelect PHP Method

buildSelect() public method

public buildSelect ( array $columns, array &$params, boolean $distinct = false, string $selectOption = null ) : string
$columns array
$params array the binding parameters to be populated
$distinct boolean
$selectOption string
return string the SELECT clause built from [[Query::$select]].
    public function buildSelect($columns, &$params, $distinct = false, $selectOption = null)
    {
        $select = $distinct ? 'SELECT DISTINCT' : 'SELECT';
        if ($selectOption !== null) {
            $select .= ' ' . $selectOption;
        }
        if (empty($columns)) {
            return $select . ' *';
        }
        foreach ($columns as $i => $column) {
            if ($column instanceof Expression) {
                if (is_int($i)) {
                    $columns[$i] = $column->expression;
                } else {
                    $columns[$i] = $column->expression . ' AS ' . $this->db->quoteColumnName($i);
                }
                $params = array_merge($params, $column->params);
            } elseif ($column instanceof Query) {
                list($sql, $params) = $this->build($column, $params);
                $columns[$i] = "({$sql}) AS " . $this->db->quoteColumnName($i);
            } elseif (is_string($i)) {
                if (strpos($column, '(') === false) {
                    $column = $this->db->quoteColumnName($column);
                }
                $columns[$i] = "{$column} AS " . $this->db->quoteColumnName($i);
            } elseif (strpos($column, '(') === false) {
                if (preg_match('/^(.*?)(?i:\\s+as\\s+|\\s+)([\\w\\-_\\.]+)$/', $column, $matches)) {
                    $columns[$i] = $this->db->quoteColumnName($matches[1]) . ' AS ' . $this->db->quoteColumnName($matches[2]);
                } else {
                    $columns[$i] = $this->db->quoteColumnName($column);
                }
            }
        }
        return $select . ' ' . implode(', ', $columns);
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * @inheritdoc
  */
 public function buildSelect($columns, &$params, $distinct = false, $selectOption = null)
 {
     if (is_array($columns)) {
         foreach ($columns as $i => $column) {
             if (!is_string($column)) {
                 continue;
             }
             $matches = [];
             if (preg_match('/^(COUNT|SUM|AVG|MIN|MAX)\\([\\{\\[]{0,2}(\\w+|\\*)[\\}\\]]{0,2}\\)$/i', $column, $matches)) {
                 $function = $matches[1];
                 $alias = $matches[2] != '*' ? $matches[2] : 'ALL';
                 $columns[$i] = "{$column} AS {$function}_{$alias}";
             }
         }
     }
     return parent::buildSelect($columns, $params, $distinct, $selectOption);
 }