Mam kolekcję rekordów, które muszęzaktualizuj zapasy. Słyszałem, że używanie "load" na Magento powoduje, że jest wolniejszy, a ponieważ używam go przed aktualizacją mojego magazynu, zastanawiam się, czy istnieje szybszy sposób, ponieważ mam tysiące produktów.
Oto przykład kodu:
$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();
Odpowiedzi:
1 dla odpowiedzi № 1Możesz spróbować załadować element magazynowy zamiast ładowania produktu. Proszę, spróbuj użyć poniższego kodu:
$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();
}
Zaczerpnięte z bloga Sonassi - Aktualizacje zapasów w Magento - FAST