我需要从CSV文件(告诉我sku,特价,到/从日期)批量更新特价。

目前我在foreach循环中使用magento models方法这样做(在解析CSV行之后):

$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;

当少数产品需要更新时,这是可以的。但是,当您更新100+产品时,这会变得非常慢,并且还会影响网站性能。

是否有我可以批量导入特价,并通过直接SQL查询设置日期?


在研究这个问题时,我找到了一个可能的解决方案(基于本文 http://fishpig.co.uk/magento/tutorials/update-prices-sql)与设置 special_price 在数据库中直接像这样:

注: 屋宇署_ 是我的表前缀

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

出现 要工作(我可以看到magento UI中的值更新)。我还不确定这是否是直接在数据库中设置特价的正确方法。

另外,我还没有弄清楚如何设置 from/to 日期。

对此的任何帮助将不胜感激。

有帮助吗?

解决方案

这么说吧 $storeId 是要更新价格的商店 $specialPrice 你们的特价吗?, $sku 是您的产品SKU, $fromDate$toDate 是。..好吧,你明白了。

现在运行此代码:

$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
    );
}

其他提示

如果要更新现有产品,则无需手动进行更改。只需导入CSV,该CSV应仅包含要更新所需的列的属性。SKU是必填字段,因此不要忘记在CSV中包含此功能。

它将进口产品非常快。

许可以下: CC-BY-SA归因
scroll top