MasterGerold
@MasterGerold

Почему не правильно сохраняются данные в базу Yii2?

Доброго времени суток! Есть таблица с полем "from_form" tiny_int(1). Вот экшин:
public function actionView($id)
{
    $model = $this->findModel($id);
    if ($model->from_form > 2) {
        $new_model = Mails::findOne($id);
        $new_model->from_form = $model->from_form - 2;
        $new_model->save();
    }

    return $this->render('view', [
        'model' => $model,
    ]);
}

Я хочу что бы когда открывается запись шла проверка и если true то отнять от этого числа 2 и записать в базу. Изначально в базе есть поле from_form со значением 4. То есть по логике при открытии должно быть 4 - 2 = 2 и 2 записать в базу. Но почему то записывается 3-а. Даже если я пишу $new_model->from_form = 2; всё равно записывается 3-а. Подскажите что я делаю не так? Если нужна ещё какая-то информация пишите в комментарии буду дополнять. Заранее благодарен!
  • Вопрос задан
  • 270 просмотров
Решения вопроса 1
slo_nik
@slo_nik Куратор тега Yii
Добрый день.
Перенесите эти вычисления в модель, в метод beforeSave(), и немного измените строку с вычислением
$new_model->from_form = ($model->from_form - 2);

P.S. Приблизительно так должно быть:
public function beforeSave($insert)
{
	if(parent::beforeSave($insert)){
		if((self::getOldAttribute('from_form') > 2){
		    $this->from_form = ($this->from_form - 2)
        }
		return true;
	}
	return false;
}
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы