Yii2 Генерация новой модели в событии сохранения текущей

Общие вопросы по использованию второй версии фреймворка. Если не знаете как что-то сделать и это про Yii 2, вам сюда.
Ответить
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

Здравствуйте! У меня вопрос по поводу генерирования данных (записей) для модели, при добавлении, редактировании другой модели! Как лучше реализовать в yii2 ? Возможно в yii2 есть события типа afterInsert($model), beforeInsert(). ?
Такая реализация как я првел меня не привлекает, возможно много ошыбок в ходе сохранения, ну и время исполнения генерации записей для второй модели. Как лучше сделать такую генерацию? Спасибо!

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

public function actionCreate()
    {
        $model = new Reservation();
        
        $modelRegCleanings = new RegularCleanings();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            // делать в цыкле создавать записи для новой модели FOR ($i = 0; $ < 52; $i++)    
                $modelRegCleanings->id_reservation = $model->id_reservation;
                $modelRegCleanings->cleaning_date = '2011/02/21';
                $modelRegCleanings->notes = $model->notes;
                modelRegCleanings->save();
            // ENDFOR;
            return $this->redirect(['view', 'id' => $model->id_reservation]);   
        } else {
            return $this->render('create', [
                    'model' => $model,
                    ]);
        }
    }

Do not teach frameworks, teach architecture!
Аватара пользователя
maleks
Сообщения: 1992
Зарегистрирован: 2012.12.26, 12:56

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение maleks »

lbondodesc писал(а):Возможно в yii2 есть события типа afterInsert($model), beforeInsert(). ?
для AR моделей такие события есть
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

Да есть такой медот в модели ARно не могу понять как им пользоваться.

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

class Reservation extends \yii\db\ActiveRecord
{
    /*** **/// 
    public function afterSave($insert, $changedAttributes)
        {

        if (parent::afterSave($insert, $changedAttributes)) {
            
            $modelRegCleanings = new RegularCleanings();
            $modelRegCleanings->id_reservation = $this->id_reservation;
            $modelRegCleanings->notes = $changedAttributes['notes'];
            $modelRegCleanings->save();
            return true;
        } else {
            return false;
        }
      }
  }
 
правильно ли будет создавать новую модель в текущей и сохранять? Или можно как то через контроллеры сделать? Подскажите, пожалуйста! Спасибо!
Do not teach frameworks, teach architecture!
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

Думаю. Было бы хорошо сделать это в контроллере RegularCleanings. Но как в чужом контроллере перехватить afterSave($insert, $changedAttributes) .?!
Do not teach frameworks, teach architecture!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение zelenin »

причем здесь контроллеры? что такое mvc?
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

По моему мнению нарушаются принццыпы MVC когда создавать новую модель в текущей!)
Можете подсказать как сделать лучше?
Do not teach frameworks, teach architecture!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение zelenin »

lbondodesc писал(а):По моему мнению нарушаются принццыпы MVC когда создавать новую модель в текущей!)
Можете подсказать как сделать лучше?
а то, что контроллер вообще к бизнес-логике отношения не имеет, ничего у вас не нарушает?)
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

Потому и спрашываю, что не уверен как лучше)) то всё таки как в таких ситуациях поступаю гуру Yii2?
Do not teach frameworks, teach architecture!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение zelenin »

lbondodesc писал(а):Потому и спрашываю, что не уверен как лучше)) то всё таки как в таких ситуациях поступаю гуру Yii2?
viewtopic.php?p=135141#p135128 сойдет
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

А если мне придётся генерить 50 записей новой модели и сохранять ?! Например:

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

public function afterSave($insert, $changedAttributes)
        {

        if (parent::afterSave($insert, $changedAttributes)) {
            for ($i=0; $i < 50; $i++) {    
                $modelRegCleanings = new RegularCleanings();
                $modelRegCleanings->id_reservation = $this->id_reservation;
                 $modelRegCleanings->notes = $changedAttributes['notes'];
                 $modelRegCleanings->save();
            }
            return true;
        } else {
            return false;
        }
      }
 
И ещё после этого выдать сообщения в виде попапа, что после создания записи было сгенерировано и записано в БД 50 новых записей в другую таблицу. А тогда уже пусть запускается екшн (редирект) текущей модели

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

public function actionCreate()
    {
        $model = new Reservation();

        if ($model->load(Yii::$app->request->post()) && $model->save()) {
            return $this->redirect(['view', 'id' => $model->id_reservation]);   
        } else {
            return $this->render('create', [
                    'model' => $model,
                    ]);
        }
    }
 
Тогда как по мне, такой вариант не подходит!
Do not teach frameworks, teach architecture!
zelenin
Сообщения: 10596
Зарегистрирован: 2013.04.20, 11:30

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение zelenin »

разговор ни о чем. как хотите так и делайте.
Аватара пользователя
lbondodesc
Сообщения: 16
Зарегистрирован: 2015.03.02, 17:55

Re: Yii2 Генерация новой модели в событии сохранения текущей

Сообщение lbondodesc »

ок) спасибо!
Do not teach frameworks, teach architecture!
Ответить