Estou tentando atualizar o preço para muitos produtos (mais de 10.000). A maneira como estou fazendo isso agora é extremamente demorada. Qual é a melhor maneira de percorrer todos os produtos e atualizar a maioria deles?
obrigado
magento-1.9
product
products-management
eftihios1986
fonte
fonte
Respostas:
Oi Magento fornecer um atributo por código abaixo
Exemplo:
Usando a coleção de produtos:
fonte
Mage::getSingleton('catalog/product_api')->update();
eMage::getSingleton('catalog/product_action')->updateAttributes()
. product_api levou 1,7 segundos na média e product_action levou 1,0 segundos na média. no entanto,$product->getResource()->saveAttribute()
levou em média 0,04 segundos em média. Obrigado!$product->getResource()->saveAttribute
ação. VALEU!!Escreva uma consulta SQL.
Segunda melhor maneira (e a que eu recomendo):
\Mage_Catalog_Model_Resource_Product_Action::updateAttributes
Exemplo de código por u_maxx:
As seleções múltiplas são normalmente salvas como números inteiros separados por vírgula, como
27,42,4711
. Portanto, se você alterar o valor para dizer1
, os outros valores serão perdidos. Mas o que você pode fazer é algo comoCONCAT(value, ',1')
adicionar o novo valor ao final, separado por uma vírgula. Eu acho que mesmo se você adicionar um valor duas vezes, isso não é problema, porque o Magento o filtra na próxima vez que o item é salvo e ignora o segundo valor.fonte
<?php $allProductIds = Mage::getModel('catalog/product')->getCollection()->getAllIds(); $attributeCode = 'some_eav_attribute'; $attributeValue = NULL; $attrData = array( $attributeCode => $attributeValue ); $storeId = 0; Mage::getSingleton('catalog/resource_product_action')->updateAttributes($allProductIds, $attrData, $storeId);
Mage::getSingleton('catalog/resource_product_action')
paraMage::getModel('catalog/product_action')
exatamente os mesmos parâmetros mencionados acima.10k produtos, use SQL. O EAV apenas turva as águas. Por pergunta é a maneira mais rápida.
Encontre attribute_id
Atualize com a pesquisa encontrada
attribute_id
acima.Suponho que você poderia fazer uma subseleção com atualização, mas, para simplificar, é mais fácil entender duas consultas SQL.
NOTA:
entity_type_id = 4
é sempre a entrada do EAV do produto. Caso você precise atualizar em massa os atributos da categoria ou do cliente, isso será diferente, assim como a tabela atualizada com base em que tipo de atributo é a sua atualização. Além disso, se você tiver uma configuração de várias lojas, certifique-se de observar estore_id
fonte
Além da resposta de Fabian acima, você pode atualizar vários campos por vez. O exemplo abaixo tem apenas 2 (em estoque, status de estoque), mas você pode usar quantos quiser.
fonte