我想要做的是,特定类别产品的批量价格变化.我们从供应商处收到建议的零售价格,但有时这些价格对我们不起作用.所以我们需要考虑产品的成本价格,例如,为产品增加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'");
}
Run Code Online (Sandbox Code Playgroud)
现在,我需要使用原始SQL,因为我的php服务器无法处理所有magento产品加载和保存(Magento 1.4在产品模型中有内存泄漏).这就是为什么我只是从产品中选择"id"来获取最少量的数据.我也明白,做所有这些SQL查询都是浪费资源,这就是为什么我在这里.如果我的每个类别只有10个产品说,我会使用产品型号来更新成本并保存产品,但有时我在每个类别中有多达500个或更多的产品.
我希望将此缩减为一个SQL查询,并摆脱foreach循环和产品集合.cost属性id是68,price属性id是64.对此的任何帮助都将非常感激.
编辑
Magento为他们的数据库使用EAV模型.因此,对于我需要访问的属性,即"成本"和"价格",它们都位于m_catalog_product_entity_decimal
因此,产品价格属性在表格中将如下所示 …
我在Magento中加载了产品,我正在尝试批量更新库存数量.我使用Mage_Catalog_Model_Product创建了所有产品,并使用setStockData设置它们的数量,如:
$product = new Mage_Catalog_Model_Product();
$product->setTypeId('simple');
$product->setStatus(1);
$product->setSku($sku);
$product->setStockData(array(
'is_in_stock' => 1,
'qty' => $record['stockstatus'],
'manage_stock' => 0,
));
...
Run Code Online (Sandbox Code Playgroud)
所以我看到setStockData工作...... 13,000次以上.
现在,正如我所说,我正在尝试更新我创建的产品的库存,使用我创建产品所做的变化...我在这里看到的变化,几乎与网络上的其他地方相同.
我的问题是我可以在上面的链接中使用代码的变体并获得有效的产品对象,但是当我在对象上调用getStockData时,它返回NULL:
$product = Mage::getModel('catalog/product')
->loadByAttribute('product_code', '678910');
var_dump($product->getName()); // returns 'Hello My Name is Product'
var_dump($product->getProductCode()); // returns '678910'
var_dump($product->getSku()); // returns 'SKU1234'
var_dump($product->getStockData()); // returns NULL (and there is a qty of 52 set)
Run Code Online (Sandbox Code Playgroud)
(我也试过在上面的链接中获得没有变化代码的产品,并且得到了与我预期相同的结果.)
$product_id = Mage::getModel('catalog/product')->getIdBySku('SKU1234');
$product = Mage::getModel('catalog/product');
$product->load($product_id);
$stockData = $product->getStockData();
var_dump($product->getName()); // returns 'Hello My Name is Product'
var_dump($product->getProductCode()); // …Run Code Online (Sandbox Code Playgroud)