如何为产品模型中的特定[custom]产品属性保存价值


12

如何为产品模型中的特定[custom]产品属性保存价值?

我从这里找到以下脚本:

$product = Mage::getModel('catalog/product')->load(1); 

$product->setName('Some Random Name'); 

$product->getResource()->saveAttribute($product, 'name');

Answers:


32

有两种解决方法,一种是通过获取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秒


感谢您的答复,但是以上脚本由于加载了模型而花费了更多时间。感谢上述脚本但由于加载了模型而花费了更多时间。
罗尼

我已经完成了代码的更新
Sander Mangel

别客气。我实际上已经在2个导入脚本中实现了,它节省了大量时间。
桑德·曼格尔

小问题:这不是您要找的答案吗?如果没有让我知道,如果是的话,请关闭问题以提高我们的回答问题率:)
Sander Mangel

11

如果您只需要保存一个属性并且已经加载了产品,则也可以使用以下方法:

$product->setData('attribute_code',$someData);
$product->getResource()->saveAttribute($product,'attribute_code');

这种方法比 catalog/resource_product_action


感谢您提供的帖子并保持最新。但是我看到一个奇怪的行为。这样的保存总是给我最好的时光。但是最近在2个Magento实例EE中,这也需要时间才能完成保存。可能是由于这些实例的某些扩展。我认为没有其他问题。这些Magento实例当前由本地开发系统打开,尚未将其转移到测试服务器实例。
换台

@Fra,您应该运行与Sander所运行的基准相同的基准-将会是一个很好的比较!
罗比·阿弗里尔
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.