Смена значений при update и insert
Смена значений при update и insert
Всем привет! Подскажите пожалуйста решение. Есть такая задача: при insert записи в базу я задаю значения некоторым полям по умолчанию через afterSave() в модели. Но при редактировании мне нужно сменить значения. Реальная ситуация человек добавляет запись и при insert она отправляется на модерацию и поле moder = 0, ее модерирует админ и она появляется на сайте, поле moder = 1. Но тут юзер решил отредактировать запись и уже на update надо снова сбросить запись на модерацию $moder = 0. Вообщем подскажите как правильно это организовать и где: в модели, в контролере? На что вешать такой функционал на контроллер, на события на поведения...
Re: Смена значений при update и insert
В методе actionUpdate обновите запись перед поиском
Re: Смена значений при update и insert
Причем здесь поиск записи если обновление поля должно произойти в момент сохранения записи в базу и в зависимости от того апдейт это или инсерт будут разные действия. И что то я сильно сомневаюсь что это нормальная практика в контроллере заниматься манипуляцией данных.
Re: Смена значений при update и insert
beforeSave Вам в рукиquasar писал(а): ↑2017.02.14, 12:33Причем здесь поиск записи если обновление поля должно произойти в момент сохранения записи в базу и в зависимости от того апдейт это или инсерт будут разные действия. И что то я сильно сомневаюсь что это нормальная практика в контроллере заниматься манипуляцией данных.
Re: Смена значений при update и insert
Пожалуйста, не говорите о нормальных практиках. Я уверен на 99%, что у Вас там индокод:
1. Поле moder используется для видимости active/nonactive сущности. Молитесь, чтобы следующий разработчик оказался не маньяком.
2. "я задаю значения некоторым полям по умолчанию через afterSave() в модели" no comment
1. Поле moder используется для видимости active/nonactive сущности. Молитесь, чтобы следующий разработчик оказался не маньяком.
2. "я задаю значения некоторым полям по умолчанию через afterSave() в модели" no comment
Re: Смена значений при update и insert
А можно пример кода для update и insert. В beforeSave($insert) как описать задание при добавлении и обновлении.
Re: Смена значений при update и insert
Код: Выделить всё
public function beforeSave($insert)
{
if (parent::beforeSave($insert)) {
if ($insert) {
// действия для вставки
} else {
// действия для обновления
}
return true;
}
return false;
}
Re: Смена значений при update и insert
Огромное спасибо! И еще вопрос данные которые задаю должны быть описаны в правилах валидации. Другими словами если я меняю поле которое не описано в правилах валидации сохранится ли оно?ElisDN писал(а): ↑2017.02.14, 13:00Код: Выделить всё
public function beforeSave($insert) { if (parent::beforeSave($insert)) { if ($insert) { // действия для вставки } else { // действия для обновления } return true; } return false; }
Re: Смена значений при update и insert
Описание полей влияет только на то, какие заполнятся из формы методом $model->load(...).
Re: Смена значений при update и insert
Я так и думал что при лоаде идет валидация. Еще раз огромное спасибо! Часто смотрю Ваши ролики на блоге, как по мне самые лучшие объяснения в интернете, продолжайте дальше снимать!
- chungachguk
- Сообщения: 435
- Зарегистрирован: 2012.07.17, 11:52
Re: Смена значений при update и insert
При загрузке нет никакой валидацииЯ так и думал что при лоаде идет валидация
https://github.com/yiisoft/yii2/blob/ma ... l.php#L819
Re: Смена значений при update и insert
А в какой момент срабатывает валидация? Возможно есть схема от момента как прилетели данные от юзера и как мы начинаем загружать их. То есть когда возникает каждое событие , валидация, сохранение и прочие дела которые происходят в модели.chungachguk писал(а): ↑2017.02.14, 13:28При загрузке нет никакой валидацииЯ так и думал что при лоаде идет валидация
https://github.com/yiisoft/yii2/blob/ma ... l.php#L819
Re: Смена значений при update и insert
В примерах:
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->validate()) {
...
}
Код: Выделить всё
if ($model->load(Yii::$app->request->post()) && $model->save()) {
...
}
Валидация происходит при прямом вызове validate() и внутри в save() перед сохранением.