Hi I'm trying to add simple products on Grouped product, but I can't.
I see the following code but not works for me on magento 2.1.8 https://meetanshi.com/blog/programmatically-create-grouped-product-in-magento-2/
My code
//recuperem a quin grouped correspon l'article actual, que sabem, cat? $grp = $this->_productCollectionFactory->create() ->addAttributeToSelect('*') ->addAttributeToFilter('type_id', array('eq' => 'grouped')); $compsaonlineDate = date('d-m-Y', strtotime('-1 day', strtotime($this->_curdate))); /** @var \Magento\Catalog\Api\Data\ProductInterface $grouped*/ foreach ($grp as $grouped) { $groupedModel = $this->productModel->load($grouped->getId()); $sku = $groupedModel->getSku(); try{ $sql = "Select * from imp.ec_v_categorias3_a where primary_id like '".$sku."'";//and xfecha >= '$compsaonlineDate' $stmt = sqlsrv_prepare($this->_conn, $sql); if(!$stmt){ $intent++; $this->_tryConnection(array($this,'setRefsToGrouped'),$intent); } $result = sqlsrv_execute($stmt); if(!$result){ $intent++; $this->_tryConnection(array($this,'setRefsToGrouped'),$intent); } $position = 0; //$ids = array(); $associated = $groupedModel->getProductLinks(); while($reference = sqlsrv_fetch_array($stmt,SQLSRV_FETCH_ASSOC)){ $position++; try { //You need to load each product to get what you need in order to build $productLink $linkedProduct = $this->productRepository->get($reference['xarticulo_id']); } catch (\Magento\Framework\Exception\NoSuchEntityException $e){ $linkedProduct = false; } if($linkedProduct){ $stock = $linkedProduct->getData('quantity_and_stock_status'); /** @var Magento\Catalog\Model\ProductLink $productLink */ $productLink = $this->_productLinkInterface->setSku($sku)//sku of product group ->setLinkType('associated') ->setLinkedProductSku($linkedProduct->getSku()) ->setLinkedProductType($linkedProduct->getTypeId()) ->setPosition($position) ->getExtensionAttributes() ->setQty($stock['qty']); //$ids[] = $linkedProduct->getId(); $associated[] = $productLink; $this->_logger->info("setRefsToGrouped grouped:".$sku.' ref:'.$reference['xreferencia']); } } if(count($associated)){ $groupedModel->setProductLinks($associated); //$grouped->setAssociatedProductIds($ids); $this->productRepository->save($groupedModel); } }catch (CouldNotSaveException $e) { $this->_logger->error("setRefsToGrouped ".$e->getMessage()); } catch (InputException $e) { $this->_logger->error("setRefsToGrouped ".$e->getMessage()); } catch (StateException $e) { $this->_logger->error("setRefsToGrouped ".$e->getMessage()); } catch (NoSuchEntityException $e) { $this->_logger->error("setRefsToGrouped ".$e->getMessage()); }catch (Exception $e){ $this->_logger->error("setRefsToGrouped ".$e->getMessage()); } }
When I execute the
$this->productRepository->save($groupedModel);
get the following exception:
PHP Fatal error: Uncaught Error: Call to undefined method Magento\Catalog\Api\Data\ProductLinkExtension::getSku() in /var/www/embalajeonline.com/web/publico/vendor/magento/framework/Reflection/DataObjectProcessor.php:86
Stack trace:
#0 /var/www/embalajeonline.com/web/publico/vendor/magento/framework/Reflection/DataObjectProcessor.php(113): Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(Object(Magento\Catalog\Api\Data\ProductLinkExtension), '\\Magento\\Catalo...')
#1 /var/www/embalajeonline.com/web/publico/vendor/magento/framework/Api/ExtensibleDataObjectConverter.php(46): Magento\Framework\Reflection\DataObjectProcessor->buildOutputDataArray(Object(Magento\Catalog\Model\Product\Interceptor), 'Magento\\Catalog...')
#2 /var/www/embalajeonline.com/web/publico/vendor/magento/module-catalog/Model/ProductRepository.php(521): Magento\Framework\Api\ExtensibleDataObjectConverter->toNestedArray(Object(Magento\Catalog\Model\Product\Interceptor), Array, 'Magento\\Catalog...')
Can you help me? How can I add associated simple products to grouped product?