/**
* @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;
}