¿Cómo se establece el precio_especial del producto en magento mediante una consulta SQL directa?

magento.stackexchange https://magento.stackexchange.com//questions/45724

  •  12-12-2019
  •  | 
  •  

Pregunta

Necesito actualizar masivamente el precio especial desde un archivo CSV (que me indica el sku, el precio especial, hasta/desde la fecha).

Por el momento lo hago usando el método de modelos magento como este (después de analizar las filas CSV) en un bucle foreach:

$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
    throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;

Esto está bien cuando es necesario actualizar un puñado de productos.Sin embargo, cuando actualiza más de 100 productos, esto se vuelve increíblemente lento y también afecta el rendimiento del sitio.

¿Existe alguna forma de importar en masa un precio especial y también establecer las fechas mediante una consulta SQL directa?


Mientras investigaba este problema, encontré una posible solución (basada en este artículo http://fishpig.co.uk/magento/tutorials/update-prices-sql) con el ajuste del special_price en la base de datos directamente así:

Nota: bd_ es mi prefijo de tabla

UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
    CPED.attribute_id = (
        SELECT
            attribute_id
        FROM
            bd_eav_attribute eav
        WHERE
            eav.entity_type_id = 4
        AND eav.attribute_code = 'special_price'
    )
AND CPED.store_id = 1   -- Retail Store
AND CPE.sku = 'ABS049'  -- Sku Being Updated

Este aparece para estar funcionando (puedo ver el valor en la interfaz de usuario de Magento actualizado).Todavía no estoy seguro de si esta es la forma correcta de establecer el precio especial directamente en la base de datos.

Además, todavía no he descubierto cómo configurar el from/to fechas.

Cualquier ayuda al respecto será muy apreciada.

¿Fue útil?

Solución

digamos que $storeId es la tienda para la cual deseas actualizar el precio $specialPrice es su precio especial, $sku es el SKU de su producto, $fromDate y $toDate son... bueno, ya entiendes la idea.

Ahora ejecuta este código:

$id = Mage::getSingleton('catalog/product')->getIdBySku($sku);
if ($id) {
    Mage::getSingleton('catalog/product_action')->updateAttributes(
        array($id), //array with ids to update
        array( //array with attributes to update
            'special_price' => $specialPrice,
            'special_from_date' => $fromDate,
            'special_to_date' => $toDate,
        ),
        $storeId //store id to update. If you want to update the global value use 0 in here
    );
}

Otros consejos

Si desea actualizar productos existentes, no es necesario realizar cambios manualmente.Simplemente importe CSV que debe contener solo aquellos atributos como columnas que son necesarios para actualizar.SKU es un campo obligatorio, así que no olvides incluirlo en tu CSV.

Importará productos muy rápido.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top