cancel
Showing results for 
Search instead for 
Did you mean: 

Any examples of programmatically creating a simple product in Magento2?

   Did you know you can see the translated content as per your choice?

Translation is in progress. Please check again after few minutes.

Any examples of programmatically creating a simple product in Magento2?

I have looked extensively.  I have found many examples for Magento 1.x but none for 2.  Can someone point me in the right direction?  I've got this, but it's not working:

public function savePiece($data) {
        $data['piece'] = unserialize($data['piece']);
        $this->_logger->debug('SavePiece data received: '. print_r($data, true));
        $website = $this->websiteRepo->get($data['storeCode']);
        $store = $this->storeRepo->get($data['storeCode']);
        $group = $this->groupRepo->get($store->getStoreGroupId());
        $category = $this->categoryRepo->get($group->getRootCategoryId(), $store->getId());
        $productFactory = new ProductFactory($this->objectManager);
        $product = $productFactory->create();
        $product->setSku($data['piece']['sku']);
        $product->setName($data['piece']['name']);
        $product->setPrice($data['piece']['al_original_price']);
        $product->setStoreId($store->getId());
        $product->setWebsiteIds(array($website->getId()));
        $product->setTypeId('simple');
        $product->setAttributeSetId(4);
        $product->setStatus(1);
        $product->setCategoryIds(array($category->getId()));
        $product->setCreatedAt(strtotime('now'));
        $product->setTaxClassId(2);
        $product->setDescription('Description');
        
        $product = $this->productRepo->save($product);
       
}     

When I test this with CURL I get "Unable to save product."  If instead I try $product->save(), I get this error:

Undefined offset: 1 in /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/module-catalog-url-rewrite/Model/ProductUrlRewriteGenerator.php on line 166' in /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/Webapi/ErrorProcessor.php:194
Stack trace:
#0 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/Webapi/ErrorProcessor.php(139): Magento\Framework\Webapi\ErrorProcessor->_critical(Object(Exception))
#1 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/module-webapi/Controller/Rest.php(163): Magento\Framework\Webapi\ErrorProcessor->maskException(Object(Exception))
#2 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/var/generation/Magento/Webapi/Controller/Rest/Interceptor.php(24): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))
#3 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/App/Http.php(115): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#4 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#5 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#6 {main} [] []

Any thoughts?  I also have a bunch of custom attributes I was going to use, but when I started getting errors I pared it back to just the settings I thought might be most likely to be required.  I can add the others back after I get a simple example working.  I appreciate everyone's help!

 

Best,
Dave

6 REPLIES 6

Re: Any examples of programmatically creating a simple product in Magento2?

Re: Any examples of programmatically creating a simple product in Magento2?

check the following code snippet it worked for me to create simple products.

 

 

$simple_product = $this->objectManager->create('\Magento\Catalog\Model\Product');
$simple_product->setSku('123');
$simple_product->setName('Product Name');
$simple_product->setDescription('Description');
$simple_product->setAttributeSetId(4);
$simple_product->setStatus(1);
$simple_product->setTypeId('simple');
$simple_product->setPrice(0);
$simple_product->setWebsiteIds(array(1));
$simple_product->setCategoryIds(array(1));
$simple_product->setStockData(array(
'use_config_manage_stock' => 0, //'Use config settings' checkbox
'manage_stock' => 1, //manage stock
'min_sale_qty' => 1, //Minimum Qty Allowed in Shopping Cart
'max_sale_qty' => 2, //Maximum Qty Allowed in Shopping Cart
'is_in_stock' => 1, //Stock Availability
'qty' => 100 //qty
)
);
$simple_product->setData('manufacturer','etc'); // save attribute | attribute code, value
$simple_product->setVisibility(4); // catalog and search
 
try{
$simple_product->save();
} catch(Exception $e){
echo $e->getMessage();
}



Re: Any examples of programmatically creating a simple product in Magento2?

Xubaer and Dimitry,

 

Thanks for the assistance.  I looked at Dimitry's example and it was a bit confusing for me (I couldn't figure out where all the constructor arguments were coming from).


Xubaer's example was much more concrete and similar to what I had before.  However, I just tried it and I'm getting an error.  First off, I'm calling it in a custom API call. I have other custom API calls working, so I generally understand how they're supposed to be called.  When I call this one with only Xubaer's code in the called function, I'm getting this error:

 

[2015-12-28 17:45:08] main.CRITICAL: exception 'Exception' with message 'Report ID: webapi-56817524ae0be; Message: Notice: Undefined offset: 1 in /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/module-catalog-url-rewrite/Model/ProductUrlRewriteGenerator.php on line 166' in /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/Webapi/ErrorProcessor.php:194
Stack trace:
#0 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/Webapi/ErrorProcessor.php(139): Magento\Framework\Webapi\ErrorProcessor->_critical(Object(Exception))
#1 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/module-webapi/Controller/Rest.php(163): Magento\Framework\Webapi\ErrorProcessor->maskException(Object(Exception))
#2 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/var/generation/Magento/Webapi/Controller/Rest/Interceptor.php(24): Magento\Webapi\Controller\Rest->dispatch(Object(Magento\Framework\App\Request\Http))
#3 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/App/Http.php(115): Magento\Webapi\Controller\Rest\Interceptor->dispatch(Object(Magento\Framework\App\Request\Http))
#4 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/vendor/magento/framework/App/Bootstrap.php(258): Magento\Framework\App\Http->launch()
#5 /usr/local/zend/var/apps/http/magento-dev.artsitesonline.com/80/_docroot_/index.php(39): Magento\Framework\App\Bootstrap->run(Object(Magento\Framework\App\Http))
#6 {main} [] []

If I comment out just the line where it calls $simple_product->save(), I get no error.  Any thoughts?

Re: Any examples of programmatically creating a simple product in Magento2?

I'm still working on this and neither of these solutions were working for me.  However, I found the book Magento 2 Developers Guide and it's been very helpful.  I'm now trying to create products via API with a call like this:

 

$testdata = json_encode(array(
         'product' => array(
                  'sku' => 'testsku', 
                  'name' => 'test API name', 
                  'attribute_set_id' => 4, 
                  'price' => 19.99,
                  'status' => 1, 
                  'type_id' => 'simple', 
                  'weight' => 1
         )
));

$url = 'http://mydomain/rest/V1/products';
$authHeader = $this->oAuthClientService->buildAuthorizationHeaderForAPIRequest(
      'POST',
      new Uri($url),
      unserialize($this->oAuthKeyService->findKeyByIdAndOwner('magento', 1)->getAccessToken())
);
$ch = curl_init($url);        
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'POST');
curl_setopt($ch, CURLOPT_POSTFIELDS, $testdata);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
     'Content-Type: application/json',
     'Content-Length: ' . strlen($testdata),
     'Authorization: ' . $authHeader
));;
$result = curl_exec($ch);

 

I have OAuth working in other calls, so I know that's not the problem.  I'm getting this error:

Magento product creation result: exception 'PDOException' with message 'SQLSTATE[42S02]: Base table or view not found: 1146 Table 'catalogsearch_fulltext_scope2' doesn't exist' in /usr/local/zend/var/apps/http/magento-mydomain/80/_docroot_/vendor/magento/zendframework1/library/Zend/Db/Statement/Pdo.php:228

The first time I got this error it said catalogsearch_fulltext_scope6 instead of ...scope2.  I restored the database to from a clean export I did right after first installing Magento, and now I'm getting scope2 instead of scope6.  

 

I'm also seeing this error in my logs and I'm not sure why:

[2016-01-11 22:13:32] main.CRITICAL: exception 'Exception' with message 'Report ID: webapi-5694290c06f31; Message: Asymmetric transaction rollback.' in /usr/local/zend/var/apps/http/mydomain/80/_docroot_/vendor/magento/framework/Webapi/ErrorProcessor.php:194

I'm not familiar enough with Magento to know why it's doing this.  I'm using Magento 2.0.0.  Please advise.  Your help is greatly appreciated. 

Re: Any examples of programmatically creating a simple product in Magento2?

I think I figured it out.  I'm not sure why I was getting the catalogsearch_fulltext_scope6 errors, but when I reinstalled I was getting the same error but with ...scope2.  After reinstalling I hadn't yet built the indexes, so apparently it had not created the index tables yet.  After building the indexes for the first time, the problem table not found error about catalogsearch_fulltext_scope2 seems to have gone away.  

 

I would love to hear what the other error is about, though ('Asymmetric transaction rollback').

 

Best,
Dave

Re: Any examples of programmatically creating a simple product in Magento2?

How to add a configurable product to this simple product?