【发布时间】:2014-11-28 10:37:19
【问题描述】:
我需要从 CSV 文件中批量更新特价(告诉我 sku、特价、到/起日期)。
目前我在 foreach 循环中使用这样的 magento 模型方法(在解析 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,如下所示:
注意:bd_ 是我的表前缀
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 日期。
对此的任何帮助将不胜感激。
【问题讨论】:
-
我只能告诉你,直接在数据库中更改内容(通过查询)迟早会咬到你。您使用的方法是正确的。我相信您在自定义 Magento CLI 脚本中运行它?在运行脚本之前尝试禁用索引的自动更新,然后启用它们(并重新运行它们)。这将占用您的执行时间...