在 php 中更新数量但在 Magento 中未更新?

Update qty in php but not updated in Magento?

我在下面获得了这段代码,用于检索和更新我的 Magento 产品的 1 个 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>";
    };

?>

数量字段不是产品模型的属性,它存在的唯一原因是您将 stock_item table 左连接到它上面。要更新数量,您需要更新 stock_item 模型的实例并保存它。有一个方便的辅助函数,可让您通过产品 ID 加载 stock_item。

$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($myProductId);
if ($stockItem->getId()) {
    $stockItem->setQty($qty);
    $stockItem->save();
}

你的 getQty 输出之后正确工作的原因是因为模型是一个 Varien_Object 并且因此具有神奇的 getter/setters 可以让你在模型上保存一个名为 "Qty" 的变量并且稍后再取回。但是,在模型上有一个变量并不意味着它会附加到该数据库条目,当您调用 save() 时,只会保存连接到产品实体的属性。