php - Yii2中如何实现mysql记录锁定

标签 php mysql locking yii2

我想在我的 Yii2 应用程序中实现记录锁定功能。

如果一个用户打开更新链接/记录(例如http://localhost/myproject/backend/web/user/update/1),那么另一个用户将无法访问此链接,用户将收到一条 ALERT 消息,内容为“此记录已被其他用户打开”。所以记录/页面应该为另一个用户锁定。 (与 MS Excel 锁定相同)

一旦第一个用户完成并离开该记录/页面,它应该解锁,另一个用户可以读取/更新该数据。

那么我如何在 Yii2 事件记录中使用 mysql 数据库锁定机制或者是否有任何其他方法来实现这一点。

如有任何帮助,我们将不胜感激。

最佳答案

它称为乐观锁定并在 official docs 中描述。 .下面是一个实现示例:

// ------ 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
    }
}

关于php - Yii2中如何实现mysql记录锁定,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31269160/

相关文章:

c# - 锁定 ASP.NET 应用程序变量

php - getmypid() 和 posix_getpid() 之间的区别

PHP文件上传未收到文件

php - 无法使用嵌套的 while 循环执行准备好的语句

php - 如何按照插入顺序在页面上显示不同的 mysql 表行

mysql - 带通配符的 DISTINCT/GROUP BY。数据库

sql - 在 Oracle 中 FK 的情况下查询 FOR UPDATE NOWAIT

php - 如何在 PHP 中获取字节序类型?

java - 通过 JPA TransactionTemplate 执行长期运行查询时连接关闭

java - 下面的多线程场景会发生什么?