public buildOrderBy ( array $columns ) : string | ||
$columns | array | |
Результат | string | the ORDER BY clause built from [[Query::$orderBy]]. |
/** * 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}; } }
/** * @inheritdoc */ public function buildOrderBy($columns) { if (empty($columns)) { // hack so LIMIT will work if no ORDER BY is specified return 'ORDER BY (SELECT NULL)'; } else { return parent::buildOrderBy($columns); } }