Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/magento/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 更快地更新收集记录_Php_Magento_Magento 1.9 - Fatal编程技术网

Php 更快地更新收集记录

Php 更快地更新收集记录,php,magento,magento-1.9,Php,Magento,Magento 1.9,我有一个需要更新库存的记录集合。我听说在magento上使用load会使速度变慢,而且由于我在更新我的库存之前使用它,我想知道是否有更快的方法,因为我有上千种产品 下面是代码示例: $productCollection = Mage::getResourceModel('catalog/product_collection') ->addFieldToFilter(array( array('attribute'

我有一个需要更新库存的记录集合。我听说在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();

您可以尝试使用库存项目装载而不是产品装载。请尝试使用以下代码:

$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的库存水平-快速

谢谢,速度要快得多