我尝试在升级脚本中更新所有商店中所有产品的属性值,如下所示:
$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(
insert
、delete
等)将数据插入数据库 - 添加新属性
- 修改现有属性
将数据脚本用于:
- 使用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');