我在下面有这个代码来检索和更新我的Magento产品的SKU。
当我查看代码$ product-> getQty();
时,它已更新并且看起来没问题但是当我查看Magento时,数量没有更新......
你可以告诉我哪里出错了吗?<?php
define('MAGENTO_ROOT', dirname(__FILE__));
$mageFilename = MAGENTO_ROOT . '/app/Mage.php';
require_once $mageFilename;
Varien_Profiler::enable();
ini_set('display_errors', 1);
umask(0);
Mage::app();
//get the collection filter the simple products & join the cataloginventory/stock_item table
$collection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('sku')->addAttributeToFilter('type_id', 'simple')->joinField(
'qty',
'cataloginventory/stock_item',
'qty',
'product_id=entity_id',
'{{table}}.stock_id=1',
'left'
) ;
?>
<html>
<head></head>
<body>
<table>
<?php
foreach ($collection as $product) {
if ($product->getSku() == "test123") {
try
{
$product->setData('qty', 99);
$product->save();
}
catch (Exception $e)
{
echo $e->getMessage();
}
}
echo "<tr><td>".$product->getSku()."</td><td> ".(int)$product->getQty()."</td></tr>";
};
?>
答案 0 :(得分:0)
qty字段不是产品型号的属性,它只是存在,因为您将stock_item表格左侧加入其中。要更新数量,您需要更新stock_item模型的实例并保存。这是一个方便的帮助函数,可以让您按产品ID加载stock_item。
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($myProductId);
if ($stockItem->getId()) {
$stockItem->setQty($qty);
$stockItem->save();
}
之后你的getQty输出正确工作的原因是因为Model是一个Varien_Object,因此有一个魔术的getter / setters,可以让你保存一个名为&#34; Qty&#34;在模型上,稍后再次检索它。但是,在模型上使用变量并不意味着它将附加到该数据库条目,只有在调用save()时才会保存连接到产品实体的属性。