2013-04-14 9 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_STORE_IDを設定する必要はないからです。 – jruzafa

+0

ありがとう、それは私の節約時間を多く最適化した。ところで、私は通常、オブジェクト上で利用可能なすべてのメソッドを見つけるのですか?これを助けることができるMagentoのドキュメントはありません。 – Alan

関連する問題