@Voroncheg

Yii2. Как записать запись в другую таблицу при транзакции?

Всем привет. Делаю запись в бд со связыннми полями. Но транзакция выдает ошибку. Нужно чтобы $model->id записалась в $address->user_id. В базе поля связал.
if($model->load(Yii::$app->request->post()) && $address->load(Yii::$app->request->post())){
              $transaction = Yii::$app->db->beginTransaction();
              try  {
                  if ($model->save()) {
                      Yii::$app->session->setFlash('success', 'Model save');
                      $address->save();

                      $transaction->commit();
                      Yii::$app->session->setFlash('success', 'User added');
                      return $this->refresh();
                  } else {
                      $transaction->rollBack();
                      Yii::$app->session->setFlash('error', 'Data error');
                  }
              } catch (Exception $e) {
                  $transaction->rollBack();
                  Yii::$app->session->setFlash('error', 'Data error2222');
              }
          }

Подскажите пожалуйста что я делаю не правильно.
  • Вопрос задан
  • 125 просмотров
Решения вопроса 1
myks92
@myks92 Куратор тега Yii
Нашёл решение — пометь вопрос ответом!
Я конечно всё понимаю, но где у вас связь. Данные вы заполняете, а сама связь не создается у вас... Она же не появляется ни откуда...

Создавайте связь напрямую:
$customer = Customer::findOne(123);
$order = new Order();
$order->subtotal = 100;
// ...

// установка атрибута, которой задаёт связь "customer" в объекте Order
$order->customer_id = $customer->id;
$order->save();


По вашему примеру
if($model->load(Yii::$app->request->post()) && $address->load(Yii::$app->request->post())){
              $transaction = Yii::$app->db->beginTransaction();
              try  {
                  if ($model->save()) {
                      $address->user_id = $model->id
                      Yii::$app->session->setFlash('success', 'Model save');
                      $address->save();

                      $transaction->commit();
                      Yii::$app->session->setFlash('success', 'User added');
                      return $this->refresh();
                  } else {
                      $transaction->rollBack();
                      Yii::$app->session->setFlash('error', 'Data error');
                  }
              } catch (Exception $e) {
                  $transaction->rollBack();
                  Yii::$app->session->setFlash('error', 'Data error2222');
              }
          }


Или используйте link():
$customer = Customer::findOne(123);
$order = new Order();
$order->subtotal = 100;
// ...

$order->link('customer', $customer);

По вашему примеру
if($model->load(Yii::$app->request->post()) && $address->load(Yii::$app->request->post())){
              $transaction = Yii::$app->db->beginTransaction();
              try  {
                  if ($model->save()) {
                      $address->link('nameRelationModel', $model)
                      Yii::$app->session->setFlash('success', 'Model save');
                      $address->save();

                      $transaction->commit();
                      Yii::$app->session->setFlash('success', 'User added');
                      return $this->refresh();
                  } else {
                      $transaction->rollBack();
                      Yii::$app->session->setFlash('error', 'Data error');
                  }
              } catch (Exception $e) {
                  $transaction->rollBack();
                  Yii::$app->session->setFlash('error', 'Data error2222');
              }
          }


Информация в документации
Ответ написан
Комментировать
Пригласить эксперта
Ваш ответ на вопрос

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

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