在安装脚本中更新产品属性值


Update product attribtue value in install script

我尝试在升级脚本中更新所有商店中所有产品的属性值,如下所示:

$installer = $this;
$installer->startSetup();

$products = Mage::getModel("catalog/product")->getCollection()->addAttributeToSelect('*');
foreach($products as $product) {
    $product->setUpRoundingMode(0);
    $product->setUpTargetValue(0);
    $product->save();
}

$installer->endSetup();

但我得到了这个错误:

致命错误:在第257行的app''code''core''Mage''Catalog''Model''Resource''Abstract.php中的非对象上调用成员函数getStoreIds()

我使用的是Magento 1.9。有什么正确的方法吗?

我发现这里的答案有点无益,所以这也是我遇到这个问题后的两分钱。

如果您使用设置脚本使用Magento模型保存数据,那么您可能做得不对。您应该使用数据脚本。正如Vinai在这篇文章中所解释的那样,不同之处在于:

数据设置脚本的详细信息应该有自己的专用部分或帖子。总而言之,它们的工作方式与模式设置脚本非常相似。简而言之,关键的区别在于它们…

  • 位于数据/目录下
  • 在文件名之前加一个数据前缀
  • 在设置应用程序环境后执行,就在调度前控制器之前

因此,如果您使用的是设置脚本,例如:

app/code/local/You/Module/sql/your_setup_name/mysql4-升级-0.1.2-0.13.php

然后您应该将其移动到不同的文件夹位置,例如:

app/code/local/You/Module/data/your_setup_name/data-upgrade--0.1.2-0.13.php

有用注释的快速摘要:

将安装脚本用于:

  • 在数据库中创建表
  • 使用Zend(或低级Magento)ORM(insertdelete等)将数据插入数据库
  • 添加新属性
  • 修改现有属性

将数据脚本用于:

  • 使用Magento模型对数据进行CRUD处理

您没有在所提供的代码中的任何位置调用函数。我相信你的错误与你的安装脚本是分开的。有什么东西触发了函数getStoreIds(),有什么想法吗?

我的解决方案是使用来自magento的数据升级api。教程可以在这里找到:http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/

我遇到了同样的问题,将其追溯到属性msrp_enabled,保存失败

然而,我切换到只保存我真正想在设置中更改的属性,而不是整个产品,我猜这是magento中的一个错误,或者你不应该在设置中保存整个产品

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