/ /コレクションの記録をより早く更新する - php、magento、magento-1.9

コレクションレコードを高速に更新する - php、magento、magento-1.9

私は必要なレコードのコレクションを持っています在庫を更新します。私は私の在庫を更新する前にそれを使うので、私は何千もの製品を持っているので、私は私の在庫を更新する前にそれを使います。

次にコード例を示します。

$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は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