public function getObjectForProductAndParameter(Product $product, $param) { $q = $this->createQuery('c')->from('ParameterProductValue ppv')->where('ppv.Parameter.id = ? ', $param->getId())->addWhere('ppv.Product.id = ?', $product->getId()); $ppv = $q->fetchOne(); if (!$ppv) { $ppv = new ParameterProductValue(); $ppv->setProduct($product); $ppv->setParameter($param); $ppv->setCommonValue('empty'); $ppv->save(); } return $ppv; }
public function executeCopyProduct($request) { $product = $this->getRoute()->getObject(); # copy product main information $newProduct = $product->copy(); $newProduct['code'] = $product['code'] . '_new_' . rand(1, 100000); ## copy product Translations $transArr = $product->Translation->toArray(); foreach ($transArr as $index => &$transVal) { unset($transVal['id']); } $newProduct->Translation->fromArray($transArr); $newProduct->save(); # copy product connections with ProductGroups foreach ($product->ProductGroups as $prodGroup) { $rel = new ProductVsProductGroup(); $rel['group_id'] = $prodGroup['group_id']; $rel['product_id'] = $newProduct['id']; $rel->save(); } # copy product connections with ParameterProductOptions foreach ($product->ParameterProductOptions as $prodGroup) { $rel = new ParameterProductOption(); $rel['option_id'] = $prodGroup['option_id']; $rel['product_id'] = $newProduct['id']; $rel->save(); } # copy product connections with ParameterProductValues and their Translations foreach ($product->ParameterProductValues as $prodValue) { $rel = new ParameterProductValue(); $arr = $prodValue->toArray(); $arr['Translation'] = $prodValue->Translation->toArray(); foreach ($arr['Translation'] as $lang => &$transArr) { unset($transArr['id']); } unset($arr['id']); $rel->fromArray($arr); $rel['product_id'] = $newProduct['id']; $rel->save(); } $this->redirect(array('sf_route' => $this->helper->getEditRoute(), 'sf_subject' => $newProduct)); }