private function createStudio($StudioForm, \app\modules\users\models\User $User) { if ($StudioForm->load(Yii::$app->request->post()) && $StudioForm->validate()) { // TODO обернуть в транзакцию $Studio = new Studio(); $Studio->type = $StudioForm->type; $Studio->name = $StudioForm->name; $User->country_id = $StudioForm->countryId; $User->city_id = $StudioForm->cityId; $Studio->currency_id = $StudioForm->currencyId; $Studio->custom_delivery = $StudioForm->custom_delivery; $Studio->custom_payment = $StudioForm->custom_payment; $Studio->slogan = $StudioForm->slogan; $Studio->description = $StudioForm->description; // Сохраним студию назначив ее пользователю $User->link('studio', $Studio); // Когда у Студии будет id (после записи), назначим связи многие ко многим // TODO попробовать сразу подать массив в link, т.к. запрос на каждую итерацию $deliveryObjects = Delivery::findAll($StudioForm->deliveryList); foreach ($deliveryObjects as $delivery) { $Studio->link('delivery', $delivery); } $paymentObjects = Payment::findAll($StudioForm->paymentList); foreach ($paymentObjects as $payment) { $Studio->link('payment', $payment); } // Назначим новую роль пользователю (atelierOwner или storeOwner) $User->assignRole($Studio->type . 'Owner'); // Рендерим страницу магазина или ателье return $this->redirect(['index']); } $StudioForm->fillCountry($User); $StudioForm->fillCity($User); return $this->render('create', ['studioForm' => $StudioForm]); }