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

时间:2014-09-22 13:47:35

标签: php magento installation magento-1.9

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

$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 :(得分: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

有用说明的快速摘要:

使用设置脚本:

  • 在数据库中创建表格
  • 使用Zend(或低级Magento)ORM(insertdelete等)将数据插入数据库
  • 添加新属性
  • 修改现有属性

使用以下数据脚本:

  • 使用Magento模型的CRUD数据

答案 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');