BLOG

Guardar información de producto de forma rápida en Magento

La forma tradicional de guardar información de producto en Magento consiste en cargar en modelo del producto, setear los nuevos datos y guardarlo. El problema de este procedimiento es que es muy lento ya que guarda entera la entidad del producto realizando todas las validaciones y disparando todos los eventos asociados.

$producto = Mage::getModel('catalog/product')->load(idpdto);
$producto->setAttributeName($value);
$producto->save;

Para modificar de forma más rápida un producto, podemos escribir directamente en las tablas de la base de datos «catalog_product_entity_*». Pero este mecanismo es muy arriesgado en cuanto a la consistencia de los datos.

Magento nos facilita otras formas de hacerlo más aconsejables dentro de su estructura de trabajo.

Sí queremos modificar un atributo concreto de un único producto podemos utilizar la funcion saveAttribute del ResourceModel de producto de la siguiente forma:

$producto = Mage::getModel('catalog/product')->load(idpdto);
$producto->setAttributeName($value);
$producto->getResource()->saveAttribute($producto, 'attribute_name');

Si queremos modificar un atributo concreto con el mismo valor para varios productos podemos utilizar el modelo de datos de la actualización masiva de productos de la siguiente forma:

Mage::getSingleton('catalog/product_action')->updateAttributes(array($idpdto1,$idpdto2,...), array('attribute_name' => $value), $store_id);

Publicado

Categoría Modelos

Etiquetado como guardar productos rapidez rendimiento