如何在 Yii2 中使用乐观锁编写删除操作?

问题描述 投票:0回答:0

我正在使用乐观锁定在 Yii2 中编写待办事项应用程序。

我现在需要写删除动作。

为此目的,我尝试编写模型、控制器和视图。

我使用这个文档链接:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#optimistic-locks 我的模特:

<?php
namespace app\models;

use yii\behaviors\OptimisticLockBehavior;
use yii\db\ActiveRecord;

class RecordModel extends ActiveRecord
{
    public static function tableName()
    {
        return 'records';
    }

    public function behaviors()
    {
        return [
            OptimisticLockBehavior::class,
        ];
    }

    public function optimisticLock()
    {
        return 'version';
    }

    public function rules()
    {
        return [
            [ ['title', 'priority'], 'required'],
            [ ['title', 'priority'], 'trim'],
        ];
    }
}

我的控制器:

            public function actionDelete($id)
    {
        $model = RecordModel::findOne($id);
        try {
            $model->delete();
            Yii::$app->session->setFlash('success', 'Successfully deleted!');
            return $this->redirect('/');
        }catch (StaleObjectException $e) {
            $model = RecordModel::findOne($model->id);
            Yii::$app->session->setFlash('error', 'Conflict,
                item was changed by another user, your changes will be lost. Edit again or Cancel');
            return $this->render('edit', [
                'model' => $model,
            ]);
        }
    }

我的 edit.php 从我调用删除操作的地方:

<h1>Edit page</h1>
<?php
use yii\helpers\Html;
use yii\widgets\ActiveForm;
?>
<?= \app\widgets\Alert::widget();?>
<? $form = ActiveForm::begin();?>
<?= $form->field($model, 'title')->textarea(['rows'=>5])->label('Title');?>
<?= $form->field($model, 'priority')->label('Priority');?>
<?= $form->field($model, 'done')->checkbox(['class' => 'mb-3 form-group'])?>
<?= Html::activeHiddenInput($model, 'version');?>
<?=   Html::submitButton('Save', ['class' => 'btn btn-success']);?>
<?    ActiveForm::end();?>
<?= Html::a('Cancel', '/', ['class' => 'btn btn-warning right'])?>
<?= Html::a('Delete', ['delete', 'id' => $model->id, 'version' => $model->version], ['class' => 'btn btn-danger right'])?>
<?= Html::a('Edit again', ['edit', 'id' => $model->id], ['class' => 'btn btn-primary right'])?>

我的调试栏总是显示 (

version
=0) - 它不会改变:“删除
records
WHERE (
id
=100) AND (
version
=0)”

请帮忙!

yii yii2 optimistic-locking
© www.soinside.com 2019 - 2024. All rights reserved.