/** * Updates an existing Stockin model. * If update is successful, the browser will be redirected to the 'view' page. * @param integer $id * @return mixed */ public function actionUpdate($id) { $model = $this->findModel($id); $modelDetails = $model->stockinDetails; if ($model->load(Yii::$app->request->post())) { $oldIDs = ArrayHelper::map($modelDetails, 'id', 'id'); $modelDetails = Stockin::createMultiple(StockinDetail::classname(), $modelDetails); Stockin::loadMultiple($modelDetails, Yii::$app->request->post()); $deleteIDS = array_diff($oldIDs, array_filter(ArrayHelper::map($modelDetails, 'id', 'id'))); //ajax validation if (Yii::$app->request->isAjax) { Yii::$app->response->format = Response::FORMAT_JSON; return ArrayHelper::merge(ActiveForm::validateMultiple($modelDetails), ActiveForm::validate($model)); } // set the time if ($model->time) { date_default_timezone_set("Asia/ShangHai"); $model->time .= " " . date("H:i:s"); } //validate all models $valid = $model->validate(); $valid = Stockin::validateMultiple($modelDetails) && $valid; if ($valid) { $transcation = Yii::$app->db->beginTransaction(); try { if ($flag = $model->save(false)) { if (!empty($deleteIDS)) { StockinDetail::deleteAll(['id' => $deleteIDS]); } foreach ($modelDetails as $modelDetail) { $modelDetail->stockin_id = $model->id; if (!($flag = $modelDetail->save(false))) { $transcation->rollBack(); } } } if ($flag) { $transcation->commit(); return $this->redirect(['view', 'id' => $model->id]); } } catch (Exception $e) { $transcation->rollBack(); } } } return $this->render('update', ['model' => $model, 'modelDetails' => empty($modelDetails) ? [new StockinDetail()] : $modelDetails]); }