我正在使用乐观锁定在 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)”
请帮忙!