5

スクリプト内から Magento の製品の在庫数を更新しようとしています。

商品をロードし、在庫数量を設定して保存しますが、数量は変わりません。

// get stock data
$stockData = $product->getStockItem();
printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL,
    $stockData->getData('qty'),
    $stockData->getData('is_in_stock'),
    $stockData->getData('manage_stock'),
    $stockData->getData('use_config_manage_stock')
);
// prints out qty=0, instock=, man_stock=, use_cfg_man_stock=


// $stockQty = 1
$product->stockItem->setData('qty', $stockQty);
$product->stockItem->setData('is_in_stock', $stockQty>0 ? 1 : 0);
$product->stockItem->setData('manage_stock', 1);
$product->stockItem->setData('use_config_manage_stock', 0);

$product->save();                           
$product->load();                           
$stockData = $product->getStockItem();
printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL,
    $stockData->getData('qty'),
    $stockData->getData('is_in_stock'),
    $stockData->getData('manage_stock'),
    $stockData->getData('use_config_manage_stock')
);
// prints out qty=0, instock=, man_stock=, use_cfg_man_stock=

どこが間違っていますか?

4

4 に答える 4

16

あなたが行方不明だったのは、$stockItem. 新しいstock_itemものを作成したり、製品を保存したりする必要はありません。

if (!($stockItem = $product->getStockItem())) {
    $stockItem = Mage::getModel('cataloginventory/stock_item');
    $stockItem->assignProduct($product)
              ->setData('stock_id', 1)
              ->setData('store_id', 1);
}
$stockItem->setData('qty', $stockQty)
          ->setData('is_in_stock', $stockQty > 0 ? 1 : 0)
          ->setData('manage_stock', 1)
          ->setData('use_config_manage_stock', 0)
          ->save();
于 2012-06-21T14:47:27.103 に答える
2

私はそれを自分で解決しました:

// get stock data
$stockData = $product->getStockItem();
printf(PHP_EOL.'Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL,
    $stockData->getData('qty'),
    $stockData->getData('is_in_stock'),
    $stockData->getData('manage_stock'),
    $stockData->getData('use_config_manage_stock')
);
// prints out qty=0, instock=, man_stock=, use_cfg_man_stock=


// $stockQty = 1
$stockItem = Mage::getModel('cataloginventory/stock_item');
$stockItem->assignProduct($product);
$stockItem->setData('is_in_stock', 1);
$stockItem->setData('stock_id', 1);
$stockItem->setData('store_id', 1);
$stockItem->setData('manage_stock', 0);
$stockItem->setData('use_config_manage_stock', 0);
$stockItem->setData('min_sale_qty', 0);
$stockItem->setData('use_config_min_sale_qty', 0);
$stockItem->setData('max_sale_qty', 1000);
$stockItem->setData('use_config_max_sale_qty', 0);
$stockItem->setData('qty', $stockQty);
$stockItem->save();

$product->save();                           
$product->load();                           
$stockData = $product->getStockItem();
printf('New Stock: qty=%d, instock=%s, man_stock=%s, use_cfg_man_stock=%s'.PHP_EOL,
    $stockData->getData('qty'),
    $stockData->getData('is_in_stock'),
    $stockData->getData('manage_stock'),
    $stockData->getData('use_config_manage_stock')
);
// prints out qty=1, instock=1, man_stock=0, use_cfg_man_stock=0

新しい StockItem を作成し、それを製品に割り当てます。これが他の誰かに役立つことを願っています。

于 2012-06-21T13:57:15.453 に答える
2

商品の在庫数を表示するには -

 <?php echo $stock = Mage::getModel('cataloginventory/stock_item')->loadByProduct($_product); ?>

そして、個々のデータを表示したい場合は、これを使用してください -

<?php echo $stock->getQty(); ?> // Will display stock quantity
<?php echo $stock->getMinQty(); ?> // Will display minimum quantity
<?php echo $stock->getMinSaleQty(); ?> //will display minimum salable quantity
于 2012-11-01T05:08:48.787 に答える
0

私の場合、プログラムでインポートした製品で同じ問題が発生しました。配列にstock_dataを追加するのを忘れていたことに気付きました...

'name' => $productName,
'stock_data' => array(
                        'use_config_manage_stock' => 0,
                        'manage_stock' => 0,
                        'qty' => 0,
                        'stock_id' => 1,
                        'min_qty' => 0,
                    )

在庫データ情報がない場合、Magento は製品をカートに追加するときに (\Mage_CatalogInventory_Model_Stock_Item で) 例外を生成します。

このノードを使用すると、機能します。=)

于 2016-01-05T12:22:36.967 に答える