Работайте с пользовательским атрибутом продукта без загрузки самого объекта продукта

magento.stackexchange https://magento.stackexchange.com/questions/14205

Вопрос

Мне нужно манипулировать пользовательским атрибутом продукта практически для всех продуктов в базе данных. Прямо сейчас у меня есть это:

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

        foreach ($productsCollection as $_product) {
            $product = Mage::getModel('catalog/product')->load($_product->getEntityId());
            if ($product->getCustomizableonly() === null) {
                $product->setData('customizableonly', 0)->getResource()->saveAttribute($product, 'customizableonly');
            }
        }

Но продукты составляют более 2000, и поэтому я не хочу загружать сам объект продукта, а работать только с экземпляром объекта продукта из коллекции. Проблема в том, что это OBJ. Экземпляр содержит только 1/9 от всего данных самого объекта продукта. И 'customizableonly' Атрибут не является частью этого 1/9 -го.

Как я могу получить доступ к атрибуту, не делая ненужную загрузку объекта. Или в целом - как этот код может быть оптимизирован до максимума, поэтому он не сильно замедлен в случае 2000+ продуктов?

Это было полезно?

Решение

Получите свою коллекцию как эта.

$productsCollection = Mage::getModel('catalog/product')->getCollection()->addAttributeToSelect('customizableonly');

И вот другой способ обновления всех продуктов одновременно, поэтому вам не нужно звонить saveAttribute 2k раз.
Из того, что я понимаю, вы хотите установить значение для customizableonly до 0 для всех продуктов, которые не имеют такой ценности.
Вот оно:

$toUpdate = array();
foreach ($productsCollection as $_product) {
    if (is_null($_product->getCustomizableonly())) {
        //remember the id for update
        $toUpdate[] = $_product->getId();
    }
}

//update all products
Mage::getSingleton('catalog/product_action')->updateAttributes($toUpdate, array('customizableonly'=>0), 0);  

Это должно дать вам повышение скорости.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с magento.stackexchange
scroll top