/** * @return null|Product * @throws CDbException */ public function copy() { $transaction = Yii::app()->getDb()->beginTransaction(); $model = new Product(); try { $model->attributes = $this->attributes; $model->image = null; $model->slug = null; $similarNamesCount = Yii::app()->getDb()->createCommand()->select('count(*)')->from($this->tableName())->where("name like :name", [':name' => $this->name . ' [%]'])->queryScalar(); $model->name = $this->name . ' [' . ($similarNamesCount + 1) . ']'; if ($eavAttributes = $this->getEavAttributes()) { $model->setTypeAttributes($eavAttributes); } if ($variants = $this->variants) { $variantAttributes = []; foreach ($variants as $variant) { $variantAttributes[] = $variant->getAttributes(['attribute_id', 'attribute_value', 'amount', 'type', 'sku']); } $model->setProductVariants($variantAttributes); } if ($model->save()) { if ($categories = $this->categories) { $categoriesIds = []; foreach ($categories as $category) { $categoriesIds[] = $category->id; } $model->saveCategories($categoriesIds); } } $transaction->commit(); return $model; } catch (Exception $e) { $transaction->rollback(); } return null; }