Estou procurando o método mais rápido e confiável para atualização de atributos em massa. Abaixo estão os métodos que eu conheço, mas não sei com qual devo ir.
$store_id = 0;
Mage::getSingleton('catalog/product_action')->updateAttributes(
array($product_id),
array('attribute_code' => $attribute_code),
$store_id
);
ou
$product->setData($attribute_code, 1234);
$product->getResource()->saveAttribute($product, $attribute_code);
magento-1.8
magento-enterprise
product-attribute
best-practice
Deepak Mallah
fonte
fonte
load
. que tudo menos rápido. Por exemplo, no método 2, a primeira linha com a carga do produto é inútil. Você não está usando em$product
lugar algum.Na verdade, existem três maneiras de atualizar um atributo em um produto sem salvar o produto completo. Dependendo do código / requisitos, um pode ser mais rápido que o outro.
Método 1:
Método 2:
Método 3: (mais rápido)
Todos os métodos acima são muito mais rápidos que salvam todo o produto, de qualquer maneira, existem algumas diferenças importantes de desempenho:
Method 1
:Method 2
:(você pode transmitir vários produtos e vários atributos)
Method 3
:(portanto, é uma abordagem mista entre os métodos 1 e 2)
O método 3 é o mais flexível de qualquer maneira, você precisará reindexar esses produtos / atributos manualmente. (para atualizá-los no front-end)
Pode ser útil se você deseja atualizar muitos produtos rapidamente e depois chamar a reindexação no final.
(se você usar o método 2, uma reindexação para cada produto será chamada após a atualização e essas várias chamadas tornarão o processo lento)
Para reindexar manualmente um único produto, consulte as funções fornecidas pelo Mage_Catalog_Model_Product_Flat_Indexer , como:
updateAttribute($attributeCode, $store = null, $productIds = null)
updateProduct($productIds, $store = null)
fonte
catalog_product_entity
.value_id
FROMcatalog_product_entity
WHERE (entity_type_id = 4 AND attribute_id = '68 'AND entity_id = '29') `` `não esperava isso. Rodando em 1.9.3.2Atualizar
"Atualização de atributos em massa" para atributos ou produtos?
Pense em atualizar vários atributos já está respondido, mas para produtos isso pode ser útil ...
Se você deseja atualizar produtos da coleção, não deve fazer isso ...
Isso enviará eventos, reconstruirá pré-requisitos e índices. Com isso, nenhum evento (e outras coisas) é ignorado e é muito mais rápido.
Para evitar atualizações de pré-requisitos, você pode adicionar ...
Para desativar / ativar o reindex em tempo real, dê uma olhada neste ... https://github.com/Flagbit/Magento-ChangeAttributeSet/commit/676f3af77fec880bc64333403675d183e8639fae
E também liberar o cache antes que a atualização em massa (produto) possa aumentar o desempenho ...
Alguns números de depuração aqui: https://github.com/Flagbit/Magento-ChangeAttributeSet/issues/16
Mage::getSingleton('catalog/product_action')->updateAttributes(...)
parece não ser o método mais rápido ... pelo menos não com a configuração do mutlistore e as tabelas planas ativadas ...saveAttribute()
updateAttributes()
updateAttributes()
(recurso singleton)fonte
updateAttributes() (resource singleton)
leva o valor real de administrador? ou o ID do elemento suspenso? (de alguma forma nós sempre obter nenhum valor valor / vazio usando este método ou seja, nada selecionado