/** * Updates an existing Order model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed */ public function actionUpdate($id) { $modelOrder = $this->findModel($id); $modelsItems = $this->getModelItems($modelOrder->orderId); $modelOrder->scenario = 'managerAdd'; //$modelsItems = $modelOrder->items; $customers_model = new Customers(); $customers_base = $arr_keys = $arr_vals = array(); $good_base = $customers_model->find()->where(['isWork' => 1])->orderBy('id')->asArray()->all(); foreach ($good_base as $key => $value) { array_push($arr_keys, $value["id"]); array_push($arr_vals, $value["customerName"]); } $customers_base = array_combine(array($arr_keys), array($arr_vals)); if ($modelOrder->load(Yii::$app->request->post())) { echo "== post request<br/>"; $oldIDs = ArrayHelper::map($modelsItems, 'id', 'orderId'); echo "== oldIDs are=<br/>"; print_r($oldIDs); $modelsItems = OrderDetail::createMultiple(OrderDetail::classname(), $modelsItems); Model::loadMultiple($modelsItems, Yii::$app->request->post()); echo "== deletedIDs are=<br/>"; print_r($deletedIDs); $deletedIDs = array_diff($oldIDs, array_filter(ArrayHelper::map($modelsItems, 'id', 'orderId'))); // ajax validation if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; return ArrayHelper::merge(ActiveForm::validateMultiple($modelsItems), ActiveForm::validate($modelOrder)); } // validate all models $valid = $modelOrder->validate(); $valid = print_r(Model::validateMultiple($modelsItems)) && $valid; echo "== valid is= " . $valid . "<br/>"; if ($valid) { $transaction = \Yii::$app->db->beginTransaction(); echo "==(trasaction) start<br/>"; try { if ($flag = $modelOrder->save(false)) { if (!empty($deletedIDs)) { echo "==(trasaction) delete oldIDs<br/>"; OrderDetail::deleteAll(['orderId' => $deletedIDs]); } echo "==(trasaction) modelItems post data are=<br/>"; foreach ($modelsItems as $modelItems) { echo "==(trasaction) save model item<br/>"; $modelItems->orderId = $modelOrder->orderId; if (!($flag = $modelItems->save(false))) { echo "======(trasaction) rollback<br/>"; $transaction->rollBack(); break; } } } if ($flag) { $transaction->commit(); echo "==(trasaction) all ok. start redirect<br/>"; return $this->redirect(['view', 'orderId' => $modelOrder->orderId]); } } catch (Exception $e) { echo "======(trasaction) rollback catch way<br/>"; $transaction->rollBack(); } } } return $this->render('update', ['modelOrder' => $modelOrder, 'modelsItems' => empty($modelsItems) ? [new OrderDetail()] : $modelsItems, 'customers_base' => $customers_base]); }