Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Programatically update product price in Magento - Invalid argument supplied for foreach()

Tags:

php

magento

I am trying to programatically update a product's price within a custom module. This is my code:

Mage::setIsDeveloperMode(true); // for debug only
try
{
    $product = Mage::getModel('catalog/product')->load($productId);
    $product->setPrice($newPrice);
    $product->save();
}
catch (Exception $ex)
{
    echo "Error: ". $ex->getMessage();
}

When this code executes, I get the following exception:

Warning: Invalid argument supplied for foreach() in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180

In the system.log file, I see allot of these entries:

2016-03-17T18:01:06+00:00 ERR (3): Warning: Invalid argument supplied for foreach() in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1180 2016-03-17T18:01:06+00:00 ERR (3): Recoverable Error: Argument 3 passed to Mage_Catalog_Model_Resource_Abstract::_canUpdateAttribute() must be of the type array, null given, called in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1225 and defined in /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php on line 543 2016-03-17T18:01:06+00:00 ERR (3): Recoverable Error: Argument 3 passed to Mage_Eav_Model_Entity_Abstract::_canUpdateAttribute() must be of the type array, null given, called in /home/www-data/public_html/app/code/core/Mage/Catalog/Model/Resource/Abstract.php on line 545 and defined in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1254 2016-03-17T18:01:06+00:00 ERR (3): Warning: array_key_exists() expects parameter 2 to be array, null given in /home/www-data/public_html/app/code/core/Mage/Eav/Model/Entity/Abstract.php on line 1256

Any idea what might be causing this? The same code on my dev magento setup works, but in production magento, this error started to appear, so I am a little confused.

like image 814
Latheesan Avatar asked Nov 28 '22 06:11

Latheesan


2 Answers

You can to try set the store:

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

like image 183
Ismael Vacco Avatar answered Nov 30 '22 20:11

Ismael Vacco


$storeId='store_id';

Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$productIds = array('products_ids');

$products = Mage::getModel('catalog/product')->getCollection();
$products->addStoreFilter();
$products->addAttributeToSelect('*');
$products->addAttributeToFilter('entity_id', array('in' => $productIds));
foreach($products as $product)
{
    $price=$product->setPrice('price');
    Mage::app()->setCurrentStore($storeId);
    $product->save(); 
}

Try this code, It works for me.

like image 39
basavarajvkondikoppa Kondikopp Avatar answered Nov 30 '22 21:11

basavarajvkondikoppa Kondikopp