Оптимистическая блокировка позволяет предотвратить обновременное обновление
одной и той же модели двумя разными пользователями
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) {
// логика разрешения конфликта версий
}
}
Yii Справочник v0.05 © 2007-2024 Igor Salnikov aka SunDoctor