2012-06-21 13 views
5

Sto cercando di aggiornare le quantità di prodotti in Magento all'interno di uno script.Impossibile aggiornare la quantità di articoli in stock per un prodotto in Magento 1.6.2

Carico il prodotto, imposta la quantità di magazzino e salvo - ma la quantità rimane invariata.

// 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= 

Dove sto andando male?

+0

In realtà ho ottenuto una "violazione del vincolo di integrità" durante il tentativo di salvare l'articolo o il prodotto, ma la soluzione di @nachito l'ha risolto per me. – Willster

risposta

16

Tutto ciò che mancava era salvare lo $stockItem. Non è necessario creare un nuovo stock_item né si deve salvare il prodotto.

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(); 
+0

funziona in Magento ver. 1.7.0.2 – user457015

+0

Hai bisogno di 'setData ('stock_id', 1)' due volte? – PiTheNumber

+0

Secondo 'setData()' è * store_id * – nachito

2

ho risolto io stesso:

// 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 

Con la creazione di un nuovo StockItem, e assegnando che al prodotto. Spero che questo aiuti qualcun altro.

2

Per visualizzare quantità di riserva per il prodotto -

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

E se si desidera visualizzare i singoli dati di utilizzare questo -

<?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 
+1

nice snippet 'Mage :: getModel ('cataloginventory/stock_item') -> loadByProduct ($ _ prodotto);' Ho usato '$ prodotto-> getStockItem()' ma quando '$ prodotto' viene caricato da' loadByAttribute() 'è un' Varien_Object' e non 'Mage_CatalogInventory_Model_Stock_Item' –

0

Nel mio caso ho avuto lo stesso problema con i prodotti che ho importato a livello di codice Ho appena realizzato che ho dimenticato di aggiungere stock_data nella matrice ...

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

Senza informazioni di borsa, Magento genera un'eccezione (a \ Mage_CatalogInventory_Model_Stock_Item) quando si aggiunge il prodotto al carrello.

Con questo nodo, funziona. =)

Problemi correlati