回答:
これを行うには2つの方法があります。1つは、Magento catalog/product
モデルを取得し、IDで製品をロードして製品全体を取得し、名前を設定して保存する方法です。
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
try {
$product->save();
} catch(Exception $e) {
echo "{$e}";
}
OPが指摘したように、これは1つの属性を変更するためだけに非常に重いです。属性一括更新ツールはこれを行うためのよりクリーンな方法を使用する必要があると考え、Mage_Catalog_Model_Resource_Product_Action
クラスを見つけました
$product_id = 1;
$store_id = 0;
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array($product_id), array(
'name' => 'foobar!'
), $store_id);
[更新]ベンチマーク
そのため、簡単なベンチマークスクリプトを作成し、結果がそれを物語っています。
$starttime = microtime(true);
for ($i=20; $i>0; $i--)
{
$action = Mage::getModel('catalog/resource_product_action');
$action->updateAttributes(array(1), array(
'name' => 'foobar!'
), 0);
}
echo "Time: " . (microtime(true) - $starttime) . " seconds\n";
$starttime = microtime(true);
for ($i=20; $i>0; $i--)
{
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
$product->save();
unset($product);
}
echo "Time: " . (microtime(true) - $starttime) . " seconds\n";
時間:0.076527833938599秒
時間:4.757472038269秒
1つの属性のみを保存する必要があり、既に製品がロードされている場合は、このメソッドも使用できます。
$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');
この方法は、 catalog/resource_product_action