lbondodesc
@lbondodesc
PHP Developer

Yii2 AR. Как правильно создать 50 моделей в событии afterSave другой модели?

Здравствуйте! В AR эсть события afterSave которое срабатывает после сохранения записи модели. Мне нужно в этом событии сгенерировать приблизительно 50 записей другой модели и сохранить их в соответсвующу таблицу.
class Reservation extends \yii\db\ActiveRecord
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;
	    }
    }

Проблема в том, что после сохранения 1 записи модели Reservation должен произойти редирект на view новосозданной записи
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,
        			]);
        }
    }

Как сделать так, чтоб перед редиректом выводился попап с уведомлениям, что при создании даной записи было создано 50 записей другой модели? И в правильно ли месте я делаю эту генерацию? Спасибо!
  • Вопрос задан
  • 3786 просмотров
Решения вопроса 2
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Я без понятия почему вам нужно создать 50 записей... ну да несуть. Делайте где хотите. Правда по хорошему я бы вообще это все в сервисе делал который бы управлял этой логикой. Ну или вынес бы генерацию в статический метод целевой модели... все от бизнес логики зависит.

По поводу уведомления - flash messages.
Ответ написан
При таком виде у Вас будет минимум 51 запрос в базу на вставку...
Лучше подготовьте модели заранее и потом с помощью batchInsert вставьте всё одним запросом.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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