我尝试更新升级脚本中所有商店中所有产品的属性值,如下所示:
$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 . 任何想法如何正确地做到这一点?
4 回答
我发现这里的答案有点无益,所以这也是我遇到这个问题后的两分钱 .
如果您使用 setup 脚本使用Magento模型保存数据,那么您可能做错了 . 您应该使用 data 脚本 . 正如Vinai在this gem of an article中解释的那样,区别在于:
因此,如果您使用的是安装脚本,例如:
然后你应该将它移动到不同的文件夹位置,例如:
有用说明的快速摘要:
使用设置脚本:
在数据库中创建表
使用Zend(或低级Magento)ORM(
insert
,delete
等)将数据插入数据库添加新属性
修改现有属性
使用数据脚本:
您没有在您提供的代码中的任何位置调用该函数 . 我相信您的错误与安装脚本是分开的 . 有什么东西在触发函数getStoreIds()有什么想法吗?
我的解决方案是使用magento的数据升级api . 可在此处找到教程:http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/
我有同样的问题,追溯到属性
msrp_enabled
,保存失败然而我切换到只保存我想要在设置而不是整个产品中更改的属性,我猜这是一个magento中的错误或者你不应该在设置中保存整个产品