【问题标题】:Update product attribtue value in install script在安装脚本中更新产品属性值
【发布时间】:2014-09-22 13:47:34
【问题描述】:

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

$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。任何想法如何正确地做到这一点?

【问题讨论】:

    标签: php magento installation magento-1.9


    【解决方案1】:

    我觉得这里的答案有点无用,所以在遇到这个问题后,这也是我的两分钱。

    如果您使用 setup 脚本使用 Magento 模型保存数据,那么您可能做错了。您应该改用 data 脚本。正如 Vinai 在this gem of an article 中解释的那样,区别在于:

    数据设置脚本的详细信息值得有专门的部分或帖子。 总而言之,它们的工作方式与模式设置脚本非常相似。简而言之,主要区别在于它们……

    • 位于 data/ 目录下
    • 文件名前有 data- 前缀
    • 在应用环境设置后,前端控制器被调度之前执行。

    因此,如果您使用的是安装脚本,例如:

    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 处理

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        【解决方案3】:

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

        【讨论】:

          【解决方案4】:

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

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

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

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-29
            • 1970-01-01
            • 2011-12-15
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多