我尝试更新升级脚本中所有商店中所有商品的属性值,如下所示:
$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();
但是我收到了这个错误:
Fatal error: Call to a member function getStoreIds() on a non-object in app\code\core\Mage\Catalog\Model\Resource\Abstract.php on line 257
我正在使用Magento 1.9。任何想法如何正确地做到这一点?
答案 0 :(得分:1)
我发现这里的答案有点无益,所以这也是我遇到这个问题后的两分钱。
如果您使用设置脚本使用Magento模型保存数据,那么您可能做错了。您应该使用数据脚本。正如Vinai在this gem of an article中解释的那样,区别在于:
数据设置脚本详细信息值得拥有自己的专用部分或帖子。 总而言之,它们以与架构设置脚本非常相似的方式工作。简而言之,关键的区别在于它们......
- 位于数据/目录
下方- 在文件名前加上数据前缀
- 在设置应用程序环境后执行,就在调度前端控制器之前执行。
因此,如果您使用的是设置脚本,例如:
app/code/local/You/Module/sql/your_setup_name/mysql4-upgrade-0.1.2-0.1.3.php
然后你应该把它移到另一个文件夹位置,例如:
app/code/local/You/Module/data/your_setup_name/data-upgrade-0.1.2-0.1.3.php
有用说明的快速摘要:
insert
,delete
等)将数据插入数据库答案 1 :(得分:0)
您没有在您提供的代码中的任何位置调用该函数。我相信您的错误与安装脚本是分开的。有什么东西在触发函数getStoreIds()有什么想法吗?
答案 2 :(得分:0)
我的解决方案是使用来自magento的数据升级api。可以在这里找到一个教程: http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/
答案 3 :(得分:0)
我遇到了同样的问题,将其追溯到属性msrp_enabled
,保存失败
然而我切换到只保存我想要在设置而不是整个产品中更改的属性,我猜这是magento中的一个错误,或者你不应该在设置中保存整个产品
$product->getResource()->saveAttribute($product, 'my_updated_attribute');