private function saveVariants(array $variants)
{
$transaction = Yii::app()->getDb()->beginTransaction();
try {
$productVariants = [];
foreach ($variants as $var) {
$variant = null;
if (isset($var['id'])) {
$variant = ProductVariant::model()->findByPk($var['id']);
}
$variant = $variant ?: new ProductVariant();
$variant->attributes = $var;
$variant->product_id = $this->id;
if ($variant->save()) {
$productVariants[] = $variant->id;
}
}
$criteria = new CDbCriteria();
$criteria->params = [':product_id' => $this->id];
$criteria->addCondition('product_id = :product_id');
$criteria->addNotInCondition('id', $productVariants);
ProductVariant::model()->deleteAll($criteria);
$transaction->commit();
return true;
} catch (Exception $e) {
$transaction->rollback();
return false;
}
}