Массовые изменения цен Magento

Я пытаюсь сделать массовое изменение цен на продукты в определенной категории. Мы получаем рекомендованные розничные цены от нашего поставщика, но иногда они не работают для нас. Итак, нам нужно взять себестоимость продукта и, например, добавить к продукту 20%, так что достаточно просто: стоимость = стоимость + 0,2 * стоимость. Теперь мне нужно сделать это для всех продуктов в выбранной категории, так что вот что у меня есть на данный момент ...

$category = Mage::getModel('catalog/category')->load(189); 

// load products from category id '189'
$products   = Mage::getModel('catalog/product')
                ->getCollection()  
                ->addCategoryFilter($category)  
                ->addAttributeToSelect('id'); 

foreach($products as $product) { 
    // get the current cost of the product
    $cost = $db->fetchRow("SELECT value FROM `m_catalog_product_entity_decimal` WHERE entity_id='" . $product->getId() . "' AND attribute_id='68'");
    $cost = $cost['value']; 
    $newCost = $cost + $cost*$percentage; 

    // update the product with a new cost
    $db->query("UPDATE `m_catalog_product_entity_decimal` SET value='$newCost' WHERE entity_id='" . $product->getId() . "' AND attribute_id='64'"); 
}

Теперь мне нужно использовать необработанный SQL, потому что мой php-сервер не может обрабатывать все продукты magento загрузка и сохранение (Magento 1.4 имеет утечку памяти в модели продукта). Вот почему я просто выбираю «id» продукта, чтобы получить как можно меньше данных. Я также понимаю, что выполнение всех этих SQL-запросов - пустая трата ресурсов, и вот почему я здесь. Если бы в каждой из моих категорий было только, скажем, 10 продуктов, я бы использовал модель продукта для обновления стоимости и сохранения продуктов, но иногда у меня есть до 500 или более продуктов в каждой категории за один раз.

Я надеюсь свести это к одному SQL-запросу и избавиться от цикла foreach и коллекции продуктов. Идентификатор атрибута стоимости - 68, идентификатор атрибута цены - 64. Любая помощь по этому поводу будет принята с благодарностью.

РЕДАКТИРОВАТЬ
Magento использует модель EAV для своей базы данных. Итак, атрибуты, к которым мне нужно получить доступ, а именно «стоимость» и «цена», они оба расположены в m_catalog_product_entity_decimal

Таким образом, атрибут цены товаров будет выглядеть так в таблице

value_id    entity_type_id  attribute_id    store_id    entity_id   value
6401             4              64             0            2184      399.9500

Значение value_id просто уникальное значение строк, entity_type_id 4 означает, что это атрибут продукта. Attribute_id связан с фактическим атрибутом. В данном случае 64 - это attribute_id для "цены". Store_id не имеет значения. Entity_id - это фактический идентификатор продукта, а значение - это фактическая цена элемента.

5
задан Dalton Conley 28 February 2011 в 20:23
поделиться