For循环只运行一次

时间:2018-06-11 08:38:47

标签: for-loop attributes save magento-1.9

对于以下代码,我尝试更新名为branding的自定义属性。 for循环仅运行一次迭代并停止。它仅更新列表中的第一个产品,而不是进一步循环。

任何人都可以让我知道为什么会这样吗?

<?php
set_time_limit(0);

// require magento core
require_once 'app/Mage.php';

// execute on admin store
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$products = Mage::getModel('catalog/product')->getCollection();

foreach($products as $product){
     echo $product->getSku();
     $product->setData('branding', 'kib');
     $product->save();  
}

1 个答案:

答案 0 :(得分:0)

使用 saveAttribute

,而不是保存总产品,只需为产品保存属性
// require magento core
require_once 'app/Mage.php';

// execute on admin store
Mage::app()->setCurrentStore(Mage_Core_Model_App::ADMIN_STORE_ID);

$products = Mage::getModel('catalog/product')->getCollection();
echo $products->getSelect();//this will give sql query just run your db.
foreach($products as $product)
{
    $product->setBranding('kib');
    $product->getResource()->saveAttribute($product, 'branding');
}

没有循环的另一个解决方案

$store_id = 0;
$product_ids = Mage::getModel('catalog/product')
        ->getCollection()        
        ->getAllIds();//you can apply some filters also

  Mage::getSingleton('catalog/product_action')->updateAttributes(
      $product_ids,//array of ids
      array('branding' => 'kib'),//you can add some other attributes also as key value pair
      $store_id
  );