Я пытаюсь сделать массовое изменение цен на продукты в определенной категории. Мы получаем рекомендованные розничные цены от нашего поставщика, но иногда они не работают для нас. Итак, нам нужно взять себестоимость продукта и, например, добавить к продукту 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 - это фактический идентификатор продукта, а значение - это фактическая цена элемента.