2017-11-09 19 views
0

私は在庫を更新する必要があるレコードのコレクションを持っています。私は、magentoに "load"を使うと遅くなり、在庫を更新する前に使用しているので、私は何千もの製品を持っているので、より速い方法があるのだろうと聞いた。あなたが製品ロードするのではなく、在庫品目のロードを使用しようとするかもしれコレクションのレコードを高速に更新する

$productCollection = Mage::getResourceModel('catalog/product_collection') 
        ->addFieldToFilter(array(
        array('attribute'=>'reference','neq'=>''), 
    )); 
//Update Prices and Stock 
foreach ($productCollection as $product) { 
try { 
    $reference = $product->getReference(); 
    $res = $products_api->xpath("item/sku[.='{$reference}']/parent::*"); 

    if (count($res) <= 0){ 
     unset($product); 
     unset($res); 
     unset($reference); 
     continue; 
    } 

    $product->load($product->getId()); 
    //Search for Stock 
    $stock = $res[0]->stocks->quantity; 
    //Update Stock 
    $product->setStockData(array(
       'use_config_manage_stock' => 0, 
       'manage_stock'   => 1, 
       'is_in_stock'    => $stock > 0 ? 1 : 0, 
       'qty'      => $stock, 
      )); 

    $product->save(); 

答えて

1

は、ここでのコード例です。 、以下のコードを使用してみてください:

$productCollection = Mage::getResourceModel('catalog/product_collection') 
        ->addFieldToFilter(array(
        array('attribute'=>'reference','neq'=>''), 
    )); 
//Update Prices and Stock 
foreach ($productCollection as $product) { 
try { 
    $reference = $product->getReference(); 
    $res = $products_api->xpath("item/sku[.='{$reference}']/parent::*"); 

    if (count($res) <= 0){ 
     unset($product); 
     unset($res); 
     unset($reference); 
     continue; 
    } 


    //Search for Stock 
    $stock = $res[0]->stocks->quantity; 
    //Update Stock 

    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product); 
    if ($stockItem->getId()) { 
     $isInStock = $stock > 0 ? 1 : 0; 
     $stockItem->setQty($stock); 
     $stockItem->setIsInStock($isInStock); 
     $stockItem->setManageStock(1); 
     $stockItem->setUseConfigManageStock(0); 
     $stockItem->save(); 
    } 

Sonassiのブログからの引用 - 一括更新の在庫レベルをMagentoの中で - FAST

+0

おかげで、はるかに高速です –

関連する問題