Mail.ruПочтаМой МирОдноклассникиВКонтактеИгрыЗнакомстваНовостиКалендарьОблакоЗаметкиВсе проекты

Yii2 Optimistic Locks delete action - почему удаляет только с версией 0?

bio norica Ученик (79), на голосовании 1 год назад
Здравствуйте!
Пытаюсь реализовать action удаления ( приложение пишу используя Yii2 Optimistic Locks).
Но постоянно удаляет только строки с нулевой версией, а если версия больше или равно 1 то не удаляет, а срабатывает catch блок:
     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');
return $this->render('edit', [
'model' => $model,
]);
}
}
Вот какой запрос в debug toolbar постоянно генерируется:
 DELETE FROM records WHERE (id=100) AND (version=0) 
хотя я удаляю другую строку не с версией 0.
Пожалуйста помогите!
Голосование за лучший ответ
Сергей Сергеев Знаток (312) 1 год назад
Проблема может быть связана с тем, что в вашей модели RecordModel не указано поле для оптимистической блокировки, поэтому по умолчанию используется поле "version". Если поле для блокировки имеет другое имя, то нужно указать его в модели с помощью метода optimisticLock().

Например, если ваше поле для блокировки называется "lock_version", то нужно добавить следующий метод в модель RecordModel:

public function optimisticLock()
{
return 'lock_version';
}
Если после этого проблема не решится, то возможно, что в таблице базы данных нет поля для блокировки. В этом случае нужно создать поле с типом данных "integer" и названием, указанным в методе optimisticLock().
bio noricaУченик (79) 1 год назад
И в модели в и бд есть то что Вы писали.
Поэтому не пойму в чем может быть причина.
Странно конечно что в доках об этом ничего не говорится. Там есть пример только для update action
Похожие вопросы