Обновите значение атрибута продукта в скрипте установки

Я пытаюсь обновить значение атрибута для всех продуктов во всех магазинах в моем скрипте обновления следующим образом:

$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();

Но я получаю эту ошибку:

Неустранимая ошибка: вызов функции-члена getStoreIds () для необъекта в app \ code \ core \ Mage \ Catalogue \ Model \ Resource \ Abstract.php в строке 257

Я использую Magento 1.9. Есть идеи, как это сделать правильно?

2

Решение

Я нахожу здесь ответы немного бесполезными, так что вот мои два цента после столкновения с этой проблемой также.

Если вы используете настроить скрипт для сохранения данных с использованием модели Magento, вы, вероятно, делаете это неправильно. Вы должны использовать данные сценарий вместо. Как объясняет Винай в эта жемчужина статьи, разница в следующем:

Детали скрипта настройки данных заслуживают отдельного отдельного раздела или поста.
В целом они работают очень похоже на сценарии настройки схемы. Короче говоря, ключевые различия заключаются в том, что они …

  • Находиться под каталогом data /
  • Иметь префикс данных перед именем файла
  • Выполняются после настройки среды приложения, непосредственно перед отправкой фронт-контроллера.

Поэтому, если вы используете скрипт установки, например:

Приложение / код / ​​местные / Вы / модуль /SQL / your_setup_name / mysql4-обновить-0.1.2-0.1.3.php

Затем вы должны переместить его в другую папку, например:

Приложение / код / ​​местные / Вы / модуль /Данные / your_setup_name / данных-обновить-0.1.2-0.1.3.php

Краткое резюме полезных заметок:

Используйте сценарии установки для:

  • Создание таблиц в базе данных
  • Вставка данных в базу данных с помощью Zend (или низкоуровневого Magento) ORM (insert, delete так далее)
  • Добавление новых атрибутов
  • Изменение существующих атрибутов

Используйте сценарии данных для:

  • CRUD’ing данные с моделями Magento
1

Другие решения

Вы нигде не вызываете функцию в указанном вами коде. Я считаю, что ваша ошибка не связана с вашим скриптом установки. Что-то вызывает функцию getStoreIds () какие-либо мысли?

0

Мое решение состояло в том, чтобы использовать API обновления данных от magento. Учебник можно найти здесь:
http://inchoo.net/magento/magento-install-install-upgrade-data-and-data-upgrade-scripts/

0

У меня была такая же проблема, проследил это до атрибута msrp_enabledсохранить его не удается

однако я переключился на сохранение атрибута, который я на самом деле хочу изменить в настройке, а не на весь продукт, я предполагаю, что это ошибка в magento, или вы не должны сохранять целые продукты в настройке

$product->getResource()->saveAttribute($product, 'my_updated_attribute');
0
По вопросам рекламы [email protected]