首页 文章

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

提问于
浏览
2

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

$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 回答

  • 0

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

    如果您使用 setup 脚本使用Magento模型保存数据,那么您可能做错了 . 您应该使用 data 脚本 . 正如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
    

    有用说明的快速摘要:

    使用设置脚本:

    • 在数据库中创建表

    • 使用Zend(或低级Magento)ORM( insertdelete 等)将数据插入数据库

    • 添加新属性

    • 修改现有属性

    使用数据脚本:

    • 使用Magento模型的CRUD数据
  • 0

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

  • 1

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

  • 0

    我有同样的问题,追溯到属性 msrp_enabled ,保存失败

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

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

相关问题