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