Оптимистическая блокировка


Оптимистическая блокировка позволяет предотвратить обновременное обновление
одной и той же модели двумя разными пользователями

1. В таблице нужно завести столбец типа integer
2. Переопределить yii\db\ActiveRecord::optimisticLock() чтобы он возвращал этот столбец
3. В веб-форму добавить скрытое поле для хранения "версии"
4. При обновление перехватить исключение  yii\db\StaleObjectException

// код представления

use yii\helpers\Html;

// ...другие поля ввода
echo Html::activeHiddenInput($model, 'version');


//  код контроллера

use yii\db\StaleObjectException;

public function actionUpdate($id)
{
    $model = $this->findModel($id);

    try {
        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id]);
        } else {
            return $this->render('update', [
                'model' => $model,
            ]);
        }
    } catch (StaleObjectException $e) {
        // логика разрешения конфликта версий
    }
}