Estoy tratando de actualizar el precio de muchos productos (más de 10.000). La forma en que lo estoy haciendo ahora es extremadamente lenta. ¿Cuál es la mejor manera de recorrer todos los productos y actualizar la mayoría de ellos?
Gracias
magento-1.9
product
products-management
eftihios1986
fuente
fuente
Respuestas:
Hola Magento proporcione un atributo por el siguiente código
Ejemplo:
Usando la colección de productos:
fuente
Mage::getSingleton('catalog/product_api')->update();
yMage::getSingleton('catalog/product_action')->updateAttributes()
. product_api tardó 1.7 segundos en promedio y product_action tomó 1.0 segundos en promedio. sin embargo,$product->getResource()->saveAttribute()
tomó un promedio de 0.04 segundos en promedio. ¡Gracias!$product->getResource()->saveAttribute
acción. ¡¡GRACIAS!!Escribe una consulta SQL.
Segunda mejor manera (y la que recomiendo):
\Mage_Catalog_Model_Resource_Product_Action::updateAttributes
Ejemplo de código de u_maxx:
Las multiselecciones normalmente se guardan como enteros separados por comas, como
27,42,4711
. Por lo tanto, si cambia el valor para decir1
, los otros valores se pierden. Pero lo que puedes hacer es algo comoCONCAT(value, ',1')
agregar el nuevo valor al final, separado por una coma. Creo que incluso si agrega un valor dos veces, esto no es un problema, porque Magento lo filtra la próxima vez que se guarda el elemento e ignora el segundo valor.fuente
<?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')
aMage::getModel('catalog/product_action')
con los mismos parámetros mencionados anteriormente.10k productos, use SQL. EAV simplemente enturbia las aguas. Por pregunta es la forma más rápida.
Encuentra atributo_id
Actualización con la consulta encontrada
attribute_id
de arriba.Supongo que podría hacer una subselección con actualización, pero por simplicidad, dos consultas SQL son más fáciles de entender.
NOTA:
entity_type_id = 4
casi siempre son las entradas del producto EAV. En caso de que necesite actualizar en masa la categoría o los atributos del cliente, esto diferirá, así como la tabla que se actualiza según el tipo de atributo que está actualizando. Además, si tiene una configuración de varias tiendas, asegúrese de tener en cuenta y condicionarstore_id
fuente
Además de la respuesta anterior de Fabian, puede actualizar varios campos a la vez. El siguiente ejemplo tiene solo 2 (en stock, estado de stock), pero puede usar tantos como desee.
fuente