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


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

$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. Есть идеи, как это сделать правильно?

Author: Robbie Averill, 2014-09-22

4 answers

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

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

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

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

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

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 (insert, delete и т.д.)
  • Добавление новых атрибутов
  • Изменение существующих атрибутов

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

  • Обработка данных с помощью моделей Magento
 1
Author: Robbie Averill, 2016-07-18 00:01:47

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

 0
Author: Rob, 2014-09-22 18:30:29

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

 0
Author: wutzebaer, 2014-09-23 07:53:23

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

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

$product->getResource()->saveAttribute($product, 'my_updated_attribute');
 0
Author: greenone83, 2016-02-08 15:03:42