/** * Add attribute action * @throws ErrorException * @throws \yii\db\Exception */ public function actionAddAttribute() { $transaction = Product::getDb()->beginTransaction(); $request = Yii::$app->request; $product = Product::findOne($request->post('product')); if (count($variants = $product->variantList)) { foreach ($variants as $variant) { $variant->delete(); } } $combinations = $this->generate_combinations($request->post('data')); foreach ($combinations as $combination) { $discount = new Discount(['scenario' => 'insert']); $logistic = new LogisticStrategy(['scenario' => 'insert']); $discount->save(); $logistic->save(); $variant = new Variant(); $variant->scenario = 'insert'; $variant->product_id = $request->post('product'); $variant->discount_id = $discount->id; $variant->logistic_strategy_id = $logistic->id; if ($variant->save()) { foreach ($combination as $attribute) { $variantAttribute = new VariantAttribute(); $variantAttribute->scenario = 'insert'; $variantAttribute->attribute_id = $attribute; $variantAttribute->variant_id = $variant->id; $variantAttribute->save(); } } else { var_dump("error"); if ($transaction->isActive) { $transaction->rollBack(); } throw new ErrorException(); } } TagDependency::invalidate(Yii::$app->commonCache, Product::generateTagStatic($request->get('id'))); $transaction->commit(); }