Answers:
有两种解决方法,一种是通过获取Magento catalog/product
模型并通过ID加载产品,这将为您提供整个产品,然后设置名称并保存。
$product = Mage::getModel('catalog/product')->load(1);
$product->setName('foobar!');
try {
$product->save();
} catch(Exception $e) {
echo "{$e}";
}
正如OP所指出的,仅更改一个属性就非常繁重。我有点想属性大量更新工具应该使用一种更简洁的方法来做到这一点,并找到了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秒
如果您只需要保存一个属性并且已经加载了产品,则也可以使用以下方法:
$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');
这种方法比 catalog/resource_product_action