2013-04-14 81 views
8

我一直在编写一个更新我的属性add_ten_pence的脚本,该属性是一个yes/no布尔值。目前它经历了数据库中的SKU's,但不幸的是它没有更新数据库。我已经粘贴下面的脚本有谁知道我要去哪里错了?以编程方式更新Magento属性

该属性默认设置为“否”,并且我希望在脚本运行时将其更改为“是”,反之亦然。

require_once('app/Mage.php'); 

umask(0); 
Mage::app('default'); 
Mage :: app()->setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID); 
$productCollection = Mage::getModel('catalog/product')->getCollection(); 

foreach($productCollection as $_product) 
{ 
    echo "\n".'updating '.$_product->getSku()."...\n"; 
    $product = Mage::getModel('catalog/product')->load($_product->getEntityId()); 
    $product->setAddTenPence(true); 
    $product->save(); 
} 

回答

25

尝试保存单个属性而不是整个产品集合。

require_once('app/Mage.php'); 

umask(0); 
Mage::app('default'); 
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID); 
$productCollection = Mage::getModel('catalog/product')->getCollection(); 

foreach($productCollection as $_product) 
{ 
    echo "\n".'updating '.$_product->getSku()."...\n"; 
    $_product->setData('add_ten_pence', 1)->getResource()->saveAttribute($_product, 'add_ten_pence'); 
} 

UPDATE

更快的方法:

$productCollection = Mage::getModel('catalog/product')->getCollection(); 
$array_product = $productCollection->getAllIds();  
Mage::getSingleton('catalog/product_action')>updateAttributes($array_product, array('add_ten_pence' => 1), Mage_Core_Model_App::ADMIN_STORE_ID); 

(感谢https://magento.stackexchange.com/users/146/marius!)

+0

优秀,感谢您的帮助! – iamgraeme

+1

当我把这个片段Mage :: app() - > setCurrentStore(Mage_Core_Model_App :: ADMIN_STORE_ID);它适用于我,因为在区域前端执行代码时,如果您的控制器是admin,则不需要设置ADMIN_STORE_ID。 – jruzafa

+0

谢谢,这优化了我的节省时间。顺便说一句:我通常在哪里找到对象上的所有可用方法?没有Magento的文档可以帮助解决这个问题。 – Alan