2012-04-27 19 views
7

Hola chicos me falta el SQL de esta actualización a granel atributos por SKU/UPCActualización masiva Magento atributos

Correr EE1.10 FYI

He todo el resto del código de trabajo pero "no estoy seguro de que la/lo/por qué de realidad actualizando nuestros atributos, y no han sido capaces de encontrarlos, mi lógica es

  1. Abrir un archivo CSV y agarrar todas las SKU y attrib asociado en una matriz 2d
  2. analizar los SKU en una entity_id
  3. Tome la entity_id y el atributo y ejecutar las actualizaciones hasta que termine
  4. tomar el resto del día de desde su Viernes

Aquí está mi código (casi terminado), GRANMENTE agradecería algo de ayuda.

/** 
    * FUNCTION: updateAttrib 
    * 
    * REQS: $db_magento 
    * Session resource 
    * 
    * REQS: entity_id 
    * Product entity value 
    * 
    * REQS: $attrib 
    * Attribute to alter 
    * 
    */ 

Consulte mi respuesta para el código de producción de trabajo. Espero que esto ayude a alguien en la comunidad de Magento.

Respuesta

24

Si bien esto puede funcionar técnicamente, el código que ha escrito es casi la última forma de hacerlo.

En Magento, realmente debería utilizar los modelos proporcionados por el código y no escribir las consultas de la base de datos por su cuenta.

En su caso, si necesita actualizar atributos para 1 o varios productos, hay una manera de hacerlo rápidamente (y con bastante seguridad).

Si mira en: /app/code/core/Mage/Adminhtml/controllers/Catalog/Product/Action/AttributeController.php, encontrará que este controlador está dedicado a actualizar varios productos rápidamente.

Si nos fijamos en el acciongrabar() función que se encuentra la siguiente línea de código:

Mage::getSingleton('catalog/product_action') 
    ->updateAttributes($this->_getHelper()->getProductIds(), $attributesData, $storeId); 

Este código es responsable de actualizar todos los ID de producto que desee, sólo los atributos modificados para cualquier tienda sola a la vez

El primer parámetro es básicamente una matriz de ID de productos. Si solo desea actualizar un solo producto, simplemente colóquelo en una matriz.

El segundo parámetro es una matriz que contiene los atributos que desea actualizar para los productos dados.Por ejemplo, si desea actualizar el precio a $ 10 y peso a 5, que pasaría a la siguiente matriz:

array('price' => 10.00, 'weight' => 5) 

Entonces, finalmente, el tercer y último atributo es el ID de tienda desea que estos cambios sucedan a. Lo más probable es que este número sea 1 o 0.

Me gustaría jugar con esta llamada de función y utilizar esto en lugar de escribir y mantener sus propias consultas de base de datos.

+0

Así que si estoy actualizando la clase de producto (que evidentemente no tiene ninguna relación interna, solo externa) cómo se correlaciona esto. – ehime

+1

@Josh Pennington: +1 para una gran pieza de investigación ... – Gowri

+0

, así que ejecuta esto en magento/shell/mycode.php? – aahhaa

0

General de Consulta de actualización será como:

UPDATE 
    catalog_product_entity_[backend_type] cpex 
SET 
    cpex.value = ? 
WHERE cpex.attribute_id = ? 
    AND cpex.entity_id = ? 

Con el fin de encontrar la [backend_type] asociado con el atributo:

SELECT 
  backend_type 
FROM 
  eav_attribute 
WHERE entity_type_id = 
  (SELECT 
    entity_type_id 
  FROM 
    eav_entity_type 
  WHERE entity_type_code = 'catalog_product') 
AND attribute_id = ? 

Puede obtener más información en el siguiente artículo de blog:
http://www.blog.magepsycho.com/magento-eav-structure-role-of-eav_attributes-backend_type-field/

Espero que esto te ayude.

Cuestiones relacionadas