Цикл работает только один раз - PullRequest
0 голосов
/ 11 июня 2018

Для приведенного ниже кода, где я пытаюсь обновить пользовательский атрибут под названием брендинг.Цикл 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 голосов
/ 12 июня 2018

Вместо сохранения всего продукта просто сохраните атрибут для продукта с помощью 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
  );
...