public function gridSort($items)
{
/** @var ActiveRecord $model */
$model = $this->owner;
if (!$model->hasAttribute($this->sortableAttribute)) {
throw new InvalidConfigException("Model does not have sortable attribute `{$this->sortableAttribute}`.");
}
$newOrder = [];
$models = [];
foreach ($items as $old => $new) {
$models[$new] = $model::findOne($new);
$newOrder[$old] = $models[$new]->{$this->sortableAttribute};
}
$model::getDb()->transaction(function () use($models, $newOrder) {
foreach ($newOrder as $modelId => $orderValue) {
/** @var ActiveRecord[] $models */
$models[$modelId]->updateAttributes([$this->sortableAttribute => $orderValue]);
}
});
}