Как реализовать блокировку записи mysql в Yii2

Я хочу реализовать функцию блокировки записи в приложении Yii2.

Если один пользователь открывает ссылку / запись обновления (пример http://localhost/myproject/backend/web/user/update/1 ), то другой пользователь не сможет получить доступ к этой ссылке, и пользователь получит сообщение ALERT котором говорится: « Эта запись уже открыта другим пользователем ". Таким образом, запись / страница должна блокироваться для другого пользователя. (Аналогично блокировке MS Excel)

Как только первый пользователь закончит и покинет эту запись / страницу, он должен разблокироваться, а другой пользователь может прочитать / обновить эти данные.

Итак, как я могу использовать механизм блокировки базы данных mysql здесь в активных записях Yii2 или есть ли другой способ реализовать это.

Любая помощь будет оценена по достоинству.

Это называется Оптимистическое блокирование и описано в официальных документах . Вот пример реализации:

 // ------ view code ------- use yii\helpers\Html; // ...other input fields echo Html::activeHiddenInput($model, 'version'); // ------ controller code ------- 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) { // logic to resolve the conflict } } 

Вы можете добавить столбец locked_by_user в свою таблицу, и когда кто-то запрашивает действие обновления, вы проверяете столбец locked_by_user, если он установлен или нет. Если нет, установите его в user_id, который сначала запрашивает действие обновления . Также вам нужно беспокоиться о заблокированных замках . И рассмотрите случаи, когда пользователь просто может закрыть окно браузера, а затем запись будет заблокирована, пока он не предпримет какие-либо действия, такие как сохранение записи или отмену редактирования .