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

amrnrhlw  于 2023-03-08  发布在  其他
关注(0)|答案(1)|浏览(320)

我在Yii2中使用乐观锁定编写待办事项应用程序。
我现在需要编写删除操作。
我试着写模型,控制器,也为这个目的的看法。
我使用此文档链接:www.example.com我的型号:https://www.yiiframework.com/doc/guide/2.0/en/db-active-record#optimistic-locks My model:

  1. <?php
  2. namespace app\models;
  3. use yii\behaviors\OptimisticLockBehavior;
  4. use yii\db\ActiveRecord;
  5. class RecordModel extends ActiveRecord
  6. {
  7. public $permitValue = null;
  8. public static function tableName()
  9. {
  10. return 'records';
  11. }
  12. public function behaviors()
  13. {
  14. return [
  15. [
  16. 'class' => OptimisticLockBehavior::class,
  17. 'value' => $this->permitValue
  18. ],
  19. ];
  20. }
  21. public function optimisticLock()
  22. {
  23. return 'version';
  24. }
  25. public function rules()
  26. {
  27. return [
  28. [ ['title', 'priority'], 'required'],
  29. [ ['title', 'priority'], 'trim'],
  30. ['permitValue', 'safe']
  31. ];
  32. }
  33. }

我的控制器:

  1. public function actionDelete($id, $version)
  2. {
  3. $model = RecordModel::findOne(['id'=>$id, 'version'=>$version]);
  4. $model->permitValue = $version;
  5. try {
  6. $model->delete();
  7. Yii::$app->session->setFlash('success', 'Successfully deleted!');
  8. return $this->redirect('/');
  9. }catch (StaleObjectException $e) {
  10. return var_dump('<pre>' . $e . '</pre>');die();
  11. $model = RecordModel::findOne($model->id);
  12. Yii::$app->session->setFlash('error', 'Conflict,
  13. item was changed by another user, your changes will be lost. Edit again or Cancel');
  14. return $this->render('edit', [
  15. 'model' => $model,
  16. ]);
  17. }
  18. }

我的edit.php,从那里我调用删除操作:

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

我的调试栏总是显示(version = 0)-它不会改变:"从records中删除,其中(id = 100)和(version = 0)"
救命啊!

roqulrg3

roqulrg31#

  1. public function actionDelete($id, $version){
  2. $model = RecordModel::findOne($id);
  3. $transaction = \Yii::$app->db->beginTransaction();
  4. try {
  5. $model->permitValue = $version;
  6. $model->delete();
  7. Yii::$app->session->setFlash('success', 'Successfully deleted!');
  8. return $this->redirect('/');
  9. }catch (StaleObjectException $e) {
  10. return var_dump('<pre>' . $e . '</pre>');die();
  11. $model = RecordModel::findOne($model->id);
  12. Yii::$app->session->setFlash('error', 'Conflict,
  13. item was changed by another user, your changes will be lost. Edit again or Cancel');
  14. return $this->render('edit', [
  15. 'model' => $model,
  16. ]);
  17. }
  18. }

相关问题