我想要做的是,特定类别产品的批量价格变化 . 我们从供应商处收到建议的零售价格,但有时这些价格对我们不起作用 . 因此,我们需要考虑产品的成本价格,例如,为产品增加20%,这样就足够了..成本足够便宜=成本0.2 *成本 . 现在我需要在所选类别的所有产品上执行此操作,所以这是我到目前为止所拥有的...
$category = Mage::getModel('catalog/category')->load(189);
// load products from category id '189'
$products = Mage::getModel('catalog/product')
->getCollection()
->addCategoryFilter($category)
->addAttributeToSelect('id');
foreach($products as $product) {
// get the current cost of the product
$cost = $db->fetchRow("SELECT value FROM `m_catalog_product_entity_decimal` WHERE entity_id='" . $product->getId() . "' AND attribute_id='68'");
$cost = $cost['value'];
$newCost = $cost + $cost*$percentage;
// update the product with a new cost
$db->query("UPDATE `m_catalog_product_entity_decimal` SET value='$newCost' WHERE entity_id='" . $product->getId() . "' AND attribute_id='64'");
}
现在,我需要使用原始SQL,因为我的php服务器无法处理所有magento产品加载和保存(Magento 1.4在产品模型中有内存泄漏) . 这就是为什么我只是从产品中选择“id”来获取最少量的数据 . 我也明白,做所有这些SQL查询都是浪费资源,这就是为什么我在这里 . 如果我的每个类别只有10个产品说,我会使用产品型号来更新成本并保存产品,但有时我在每个类别中有多达500个或更多的产品 .
我希望将此缩减为一个SQL查询,并摆脱foreach循环和产品集合 . cost属性id是68,price属性id是64.对此的任何帮助都将非常感激 .
EDIT
Magento为他们的数据库使用EAV模型 . 因此,对于我需要访问的属性,"cost"和"price",它们都位于 m_catalog_product_entity_decimal
因此,产品价格属性在表格中将如下所示
value_id entity_type_id attribute_id store_id entity_id value
6401 4 64 0 2184 399.9500
value_id只是行的唯一值,entity_type_id 4表示这是一个产品属性 . attribute_id与实际属性相关联 . 在这种情况下,64是“price”的attribute_id . Store_id无关紧要 . Entity_id是实际的产品ID,值是项目的实际价格 .
4 回答
老实说,B00MER有正确的想法,但我之前也必须做类似的事情 . 另外,我觉得要写一点SQL . 如果您只想将类别中所有产品的成本乘以1.2,您可以执行以下操作:
你无疑需要重新索引所有内容并检查结果以确保 . 显然,将X替换为您的目标类别,并且您似乎使用了
m_
的表格前缀,因此也要添加(我将其留给其他来自此处的搜索者) .希望有所帮助!
谢谢,乔
走出Magento 's ORM (as resource hungry as it can be) isn'真的是一个好主意 . Here's a patch for 1.4 CE memory leak并且我会以"Magento"方式执行此操作并保存所需的丢失或部分数据的麻烦 . 如果您经常需要管理大量产品/类别数据,您也可以考虑Unigry's Data RapidFlow,价格昂贵,但非常值得每一分钱 .
考虑magmi,它可以做更多这样的事情并使用直接SQL . 它也适用于多商店设置 .
但是您可以使用magento数据对象来更新示例: