Смена значений при update и insert

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
quasar
Сообщения: 109
Зарегистрирован: 2014.10.22, 09:27

Смена значений при update и insert

Сообщение quasar »

Всем привет! Подскажите пожалуйста решение. Есть такая задача: при insert записи в базу я задаю значения некоторым полям по умолчанию через afterSave() в модели. Но при редактировании мне нужно сменить значения. Реальная ситуация человек добавляет запись и при insert она отправляется на модерацию и поле moder = 0, ее модерирует админ и она появляется на сайте, поле moder = 1. Но тут юзер решил отредактировать запись и уже на update надо снова сбросить запись на модерацию $moder = 0. Вообщем подскажите как правильно это организовать и где: в модели, в контролере? На что вешать такой функционал на контроллер, на события на поведения...
artrox
Сообщения: 5
Зарегистрирован: 2017.02.14, 12:20

Re: Смена значений при update и insert

Сообщение artrox »

В методе actionUpdate обновите запись перед поиском
quasar
Сообщения: 109
Зарегистрирован: 2014.10.22, 09:27

Re: Смена значений при update и insert

Сообщение quasar »

artrox писал(а): 2017.02.14, 12:26 В методе actionUpdate обновите запись перед поиском
Причем здесь поиск записи если обновление поля должно произойти в момент сохранения записи в базу и в зависимости от того апдейт это или инсерт будут разные действия. И что то я сильно сомневаюсь что это нормальная практика в контроллере заниматься манипуляцией данных.
artrox
Сообщения: 5
Зарегистрирован: 2017.02.14, 12:20

Re: Смена значений при update и insert

Сообщение artrox »

quasar писал(а): 2017.02.14, 12:33
artrox писал(а): 2017.02.14, 12:26 В методе actionUpdate обновите запись перед поиском
Причем здесь поиск записи если обновление поля должно произойти в момент сохранения записи в базу и в зависимости от того апдейт это или инсерт будут разные действия. И что то я сильно сомневаюсь что это нормальная практика в контроллере заниматься манипуляцией данных.
beforeSave Вам в руки
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Смена значений при update и insert

Сообщение ElisDN »

quasar писал(а): 2017.02.14, 12:33 обновление поля должно произойти в момент сохранения записи в базу и в зависимости от того апдейт это или инсерт будут разные действия
Тогда в beforeSave($insert).
artrox
Сообщения: 5
Зарегистрирован: 2017.02.14, 12:20

Re: Смена значений при update и insert

Сообщение artrox »

Пожалуйста, не говорите о нормальных практиках. Я уверен на 99%, что у Вас там индокод:
1. Поле moder используется для видимости active/nonactive сущности. Молитесь, чтобы следующий разработчик оказался не маньяком.
2. "я задаю значения некоторым полям по умолчанию через afterSave() в модели" no comment
quasar
Сообщения: 109
Зарегистрирован: 2014.10.22, 09:27

Re: Смена значений при update и insert

Сообщение quasar »

ElisDN писал(а): 2017.02.14, 12:46
quasar писал(а): 2017.02.14, 12:33 обновление поля должно произойти в момент сохранения записи в базу и в зависимости от того апдейт это или инсерт будут разные действия
Тогда в beforeSave($insert).
А можно пример кода для update и insert. В beforeSave($insert) как описать задание при добавлении и обновлении.
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Смена значений при update и insert

Сообщение ElisDN »

Код: Выделить всё

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($insert) {
            // действия для вставки
        } else {
            // действия для обновления
        }
        return true;
    }
    return false;
}
quasar
Сообщения: 109
Зарегистрирован: 2014.10.22, 09:27

Re: Смена значений при update и insert

Сообщение quasar »

ElisDN писал(а): 2017.02.14, 13:00

Код: Выделить всё

public function beforeSave($insert)
{
    if (parent::beforeSave($insert)) {
        if ($insert) {
            // действия для вставки
        } else {
            // действия для обновления
        }
        return true;
    }
    return false;
}
Огромное спасибо! И еще вопрос данные которые задаю должны быть описаны в правилах валидации. Другими словами если я меняю поле которое не описано в правилах валидации сохранится ли оно?
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Смена значений при update и insert

Сообщение ElisDN »

quasar писал(а): 2017.02.14, 13:02 Огромное спасибо! И еще вопрос данные которые задаю должны быть описаны в правилах валидации. Другими словами если я меняю поле которое не описано в правилах валидации сохранится ли оно?
Описание полей влияет только на то, какие заполнятся из формы методом $model->load(...).
quasar
Сообщения: 109
Зарегистрирован: 2014.10.22, 09:27

Re: Смена значений при update и insert

Сообщение quasar »

ElisDN писал(а): 2017.02.14, 13:06
quasar писал(а): 2017.02.14, 13:02 Огромное спасибо! И еще вопрос данные которые задаю должны быть описаны в правилах валидации. Другими словами если я меняю поле которое не описано в правилах валидации сохранится ли оно?
Описание полей влияет только на то, какие заполнятся из формы методом $model->load(...).
Я так и думал что при лоаде идет валидация. Еще раз огромное спасибо! Часто смотрю Ваши ролики на блоге, как по мне самые лучшие объяснения в интернете, продолжайте дальше снимать!
Аватара пользователя
chungachguk
Сообщения: 435
Зарегистрирован: 2012.07.17, 11:52

Re: Смена значений при update и insert

Сообщение chungachguk »

Я так и думал что при лоаде идет валидация
При загрузке нет никакой валидации

https://github.com/yiisoft/yii2/blob/ma ... l.php#L819
quasar
Сообщения: 109
Зарегистрирован: 2014.10.22, 09:27

Re: Смена значений при update и insert

Сообщение quasar »

chungachguk писал(а): 2017.02.14, 13:28
Я так и думал что при лоаде идет валидация
При загрузке нет никакой валидации

https://github.com/yiisoft/yii2/blob/ma ... l.php#L819
А в какой момент срабатывает валидация? Возможно есть схема от момента как прилетели данные от юзера и как мы начинаем загружать их. То есть когда возникает каждое событие , валидация, сохранение и прочие дела которые происходят в модели.
rak
Сообщения: 2181
Зарегистрирован: 2010.11.02, 23:40
Контактная информация:

Re: Смена значений при update и insert

Сообщение rak »

quasar писал(а): 2017.02.14, 13:53 А в какой момент срабатывает валидация? Возможно есть схема от момента как прилетели данные от юзера и как мы начинаем загружать их. То есть когда возникает каждое событие , валидация, сохранение и прочие дела которые происходят в модели.
https://github.com/yiisoft/yii2/blob/ma ... ve-record-
Аватара пользователя
ElisDN
Сообщения: 5845
Зарегистрирован: 2012.10.07, 10:24
Контактная информация:

Re: Смена значений при update и insert

Сообщение ElisDN »

quasar писал(а): 2017.02.14, 13:53 А в какой момент срабатывает валидация? Возможно есть схема от момента как прилетели данные от юзера и как мы начинаем загружать их. То есть когда возникает каждое событие , валидация, сохранение и прочие дела которые происходят в модели.
В примерах:

Код: Выделить всё

if ($model->load(Yii::$app->request->post()) && $model->validate()) {
    ...
}

Код: Выделить всё

if ($model->load(Yii::$app->request->post()) && $model->save()) {
    ...
}
Получение списка атрибутов для присваивания происходит в load(...), когда он вызывает setAttributes(...).
Валидация происходит при прямом вызове validate() и внутри в save() перед сохранением.
Ответить