yii\db\QueryBuilder::buildOrderBy PHP Method

buildOrderBy() public method

public buildOrderBy ( array $columns ) : string
$columns array
return string the ORDER BY clause built from [[Query::$orderBy]].
    public function buildOrderBy($columns)
    {
        if (empty($columns)) {
            return '';
        }
        $orders = [];
        foreach ($columns as $name => $direction) {
            if ($direction instanceof Expression) {
                $orders[] = $direction->expression;
            } else {
                $orders[] = $this->db->quoteColumnName($name) . ($direction === SORT_DESC ? ' DESC' : '');
            }
        }
        return 'ORDER BY ' . implode(', ', $orders);
    }

Usage Example

Ejemplo n.º 1
0
 /**
  * Recalculate sorting
  */
 public function recalculateSort()
 {
     $owner = $this->owner;
     $db = $this->owner->getDb();
     $builder = new QueryBuilder($db);
     $orderFields = ['sort' => 'asc'];
     foreach ($owner->primaryKey() as $field) {
         if ($field != 'sort') {
             $orderFields[$field] = 'asc';
         }
     }
     // recalculate sort
     $query = $builder->update($owner->tableName(), [$this->sortAttribute => new Expression('(@sortingCount:=(@sortingCount+1))')], $this->getCondition(), $params) . ' ' . $builder->buildOrderBy($orderFields);
     $db->createCommand('set @sortingCount=-1;' . $query, $params)->execute();
     // update in current record
     if (!$owner->getIsNewRecord()) {
         $owner->{$this->sortAttribute} = $owner->findOne($owner->getPrimaryKey())->{$this->sortAttribute};
     }
 }
All Usage Examples Of yii\db\QueryBuilder::buildOrderBy