Я ищу самый быстрый и надежный способ массового обновления атрибутов. Ниже приведены методы, которые мне известны, но я не знаю, с какими из них я должен идти.
$store_id = 0;
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($product_id),
array('attribute_code' => $attribute_code),
$store_id
);
или
$product->setData($attribute_code, 1234);
$product->getResource()->saveAttribute($product, $attribute_code);
load
. что угодно, но не быстро. Например, в методе 2 первая строка с загрузкой продукта является бесполезной. Вы не используете$product
нигде.На самом деле есть 3 способа обновить атрибут продукта без сохранения всего продукта. В зависимости от кода / требований одно может быть быстрее другого.
Способ 1:
Способ 2:
Способ 3: (самый быстрый)
Все вышеперечисленные методы намного быстрее, что сохраняет весь продукт в любом случае, есть некоторые существенные различия в производительности:
Method 1
:Method 2
:(вы можете передать несколько продуктов и несколько атрибутов)
Method 3
:(поэтому это смешанный подход между методом 1 и 2)
Метод 3 является более гибким, в любом случае вам придется переиндексировать этот продукт / атрибуты вручную. (чтобы они обновлялись во внешнем интерфейсе).
Это может быть полезно, если вы хотите быстро обновить множество продуктов, а затем вызвать в конце реиндекс.
(если вы используете метод 2, после обновления вызывается переиндексация для каждого продукта, и эти многочисленные вызовы замедляют весь процесс)
Чтобы вручную переиндексировать отдельный продукт, см. Функции, предоставляемые Mage_Catalog_Model_Product_Flat_Indexer, такие как:
updateAttribute($attributeCode, $store = null, $productIds = null)
updateProduct($productIds, $store = null)
источник
catalog_product_entity
.value_id
ОТcatalog_product_entity
ГДЕ (entity_type_id = 4 AND attribute_id = '68 'И entity_id = '29') `` `не ожидал этого. Запуск на 1.9.3.2Обновить
«Массовое обновление атрибутов» для атрибутов или продуктов?
Думаю, что обновление нескольких атрибутов уже отвечено, но для продуктов это может быть полезно ...
Если вы хотите обновить продукты из коллекции, вы не должны делать это ...
Это будет отправлять события, перестраивать цены и индексы. С этим никакие события (и некоторые другие вещи) не пропускаются и намного быстрее.
Чтобы избежать ценовых обновлений, вы можете добавить ...
Чтобы отключить / включить переиндексацию на лету, взгляните на это ... https://github.com/Flagbit/Magento-ChangeAttributeSet/commit/676f3af77fec880bc64333403675d183e8639fae
А также очистка кеша перед массовым обновлением может повысить производительность ...
Некоторые цифры отладки здесь: https://github.com/Flagbit/Magento-ChangeAttributeSet/issues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
кажется, не самый быстрый способ ... по крайней мере, не с настройкой mutlistore и плоскими таблицами ...saveAttribute()
updateAttributes()
updateAttributes()
(ресурс синглтон)источник
updateAttributes() (resource singleton)
принимает фактическое значение администратора? или идентификатор выпадающего элемента? (каким-то образом мы всегда не получаем значение / пустое значение, используя этот метод, т.е. ничего не выбрано