Как установить специальную цену продукта в magento с помощью прямого запроса SQL?

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

  •  12-12-2019
  •  | 
  •  

Вопрос

Мне нужно массово обновить специальную цену из файла CSV (в котором указан артикул, специальная цена, дата и дата).

На данный момент я делаю это, используя метод моделей magento, подобный этому (после анализа строк CSV) в цикле foreach:

$p = Mage::getModel('catalog/product');
$product_id = $p->getIdBySku($product['SKU']);
if (!$product_id) {
    throw new Exception('Product Does Not Exists');
}
$p->setStoreId($store_id)->load($product_id);
$p->setSpecialPrice(floatval($product['Price']));
$p->setSpecialFromDate($product['FromDate']);
$p->setSpecialFromDateIsFormated(true);
$p->setSpecialToDate($product['ToDate']);
$p->setSpecialToDateIsFormated(true);
$p->save();
$p = null;

Это нормально, когда несколько продуктов требуют обновления.Однако когда вы обновляете более 100 продуктов, это становится невероятно медленным и влияет также на производительность сайта.

Могу ли я массово импортировать специальную цену, а также устанавливать даты с помощью прямого SQL-запроса?


Изучая эту проблему, я нашел возможное решение (на основе этой статьи). http://fishpig.co.uk/magento/tutorials/update-prices-sql) с установкой special_price в базе данных прямо так:

Примечание: бд_ это мой префикс таблицы

UPDATE bd_catalog_product_entity AS CPE
INNER JOIN bd_catalog_product_entity_decimal AS CPED ON CPED.entity_id = CPE.entity_id
SET CPED.`value` = 2.99 -- New Special Price
WHERE
    CPED.attribute_id = (
        SELECT
            attribute_id
        FROM
            bd_eav_attribute eav
        WHERE
            eav.entity_type_id = 4
        AND eav.attribute_code = 'special_price'
    )
AND CPED.store_id = 1   -- Retail Store
AND CPE.sku = 'ABS049'  -- Sku Being Updated

Этот появляется чтобы работать (я вижу обновленное значение в пользовательском интерфейсе Magento).Я пока не уверен, что это правильный способ установить специальную цену напрямую в базе данных.

Кроме того, я еще не разобрался, как настроить from/to даты.

Любая помощь в этом вопросе будет высоко оценена.

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

Решение

Скажем так $storeId это магазин, для которого вы хотите обновить цену $specialPrice это ваша специальная цена, $sku артикул вашего продукта, $fromDate и $toDate это... ну, вы поняли.

Теперь запустите этот код:

$id = Mage::getSingleton('catalog/product')->getIdBySku($sku);
if ($id) {
    Mage::getSingleton('catalog/product_action')->updateAttributes(
        array($id), //array with ids to update
        array( //array with attributes to update
            'special_price' => $specialPrice,
            'special_from_date' => $fromDate,
            'special_to_date' => $toDate,
        ),
        $storeId //store id to update. If you want to update the global value use 0 in here
    );
}

Другие советы

Если вы хотите обновить существующие продукты, то не нужно делать изменения вручную.Просто импортируйте CSV, которые должны содержать только те атрибуты в виде столбцов, которые необходимы для обновления.SKU требуется поле, поэтому не забудьте включить это в ваш CSV.

Это будет импортировать продукты очень быстро.

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