J.K*_*.A. 6 php mysql locking yii2
我想在我的Yii2应用程序中实现记录锁定功能.
如果一个用户打开更新链接/记录(例如http://localhost/myproject/backend/web/user/update/1),则另一个用户无法访问此链接,用户将收到一条ALERT消息" 此记录已由另一个用户打开 ".所以记录/页面应锁定另一个用户.(与MS Excel锁定相同)
一旦第一个用户完成并离开该记录/页面,它就应该解锁,另一个用户可以读取/更新该数据.
那么如何在Yii2活动记录中使用mysql数据库锁定机制,还是有其他方法来实现它.
任何帮助,将不胜感激.
它被称为乐观锁定,并在官方文档中进行了描述.以下是一个实施示例:
// ------ 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
}
}
Run Code Online (Sandbox Code Playgroud)
您可以将locked_by_user列添加到表中,当有人请求更新操作时,您检查locked_by_user列是否已设置。如果没有,则设置为最先请求更新操作的user_id 。您还需要关注重置锁的问题。并考虑用户只能关闭浏览器窗口,然后记录将被锁定,直到他做出任何操作(例如保存记录或取消编辑)的情况。
| 归档时间: |
|
| 查看次数: |
2714 次 |
| 最近记录: |