Сохранять несколько моделей за раз в Yii2

У меня две модели: Users и Students . Я хочу вставлять данные в эти таблицы одновременно. Во-первых, я сохраняю данные в модели Students а затем в модели Users .

Теперь, если данные не будут успешно вставлены в модель Users в таблице Students уже есть запись. То, что я хочу, – это записи данных в обе модели, только если данные могут быть успешно сохранены в обоих.

Теперь мой код контроллера выглядит примерно так:

  public function actionCreate() { $model = new Students(); $userModel = new Users(); if ($model->load(Yii::$app->request->post()) && $userModel->load(Yii::$app->request->post()) && $model->save() && $userModel->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { return $this->render('create', [ 'model' => $model, 'userModel' => $userModel, ]); } } 

ошибка в модели пользователей и не возвращает true, когда я вызываю $userModel->save() . здесь $userModel->save() возвращает true и вставляет данные в таблицу.

Есть ли другой способ сделать это без каких-либо осложнений?

Вы должны использовать транзакции, чтобы обе модели были сохранены правильно. Пример:

 $transaction = Yii::$app->db->beginTransaction(); try { if ($model->save() && $userModel->save()) { $transaction->commit(); } else { $transaction->rollBack(); } } catch (Exception $e) { $transaction->rollBack(); } 

Yii2 уже может это сделать. Подтвердите ввод перед сохранением данных в модели:

 if ( $model->load(Yii::$app->request->post() && $userModel->load(Yii::$app->request->post() ) { // Check validation if ($model->validate() && $userModel->validate()) { $model->save(); $userModel->save(); } else { // Throw error } } 

Дополнительная информация: http://www.yiiframework.com/doc-2.0/guide-input-validation.html

Попытайтесь увидеть, какие ошибки возвращает модель пользователей. Вызовите метод getErrors () в условии else.

 if ($model->load(Yii::$app->request->post()) && $userModel->load(Yii::$app->request->post()) && $model->save() && $userModel->save()) { return $this->redirect(['view', 'id' => $model->id]); } else { var_dump($userModel->getErrors()); .... } 

И вы увидите ошибки, которые не позволяют сохранить модель «Пользователи».