在PHP中更新qty但在Magento中没有更新?

时间:2015-02-18 01:17:01

标签: php magento

我在下面有这个代码来检索和更新我的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>";
    };

?>

1 个答案:

答案 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()时才会保存连接到产品实体的属性。