Magento - обновить все товары с помощью sql - PullRequest
1 голос
/ 24 мая 2011

Я хочу обновить инвентарь всех продуктов My Magento.

Можно ли сделать это только с помощью SQL-запроса?

Какой запрос, если это возможно?

Большое спасибо

Ответы [ 4 ]

7 голосов
/ 24 мая 2011

Как то так?

UPDATE cataloginventory_stock_item SET qty='<my_quantity>';

Другие полезные поля в этой таблице могут быть:

  • Кол-во
  • min_qty
  • use_config_min_qty
  • is_qty_decimal
  • Задержки
  • use_config_backorders
  • min_sale_qty
  • use_config_min_sale_qty
  • max_sale_qty
  • use_config_max_sale_qty
  • is_in_stock
  • low_stock_date
  • notify_stock_qty
  • use_config_notify_stock_qty
  • manage_stock
  • use_config_manage_stock
  • stock_status_changed_automatics
  • use_config_qty_increments
  • qty_increments
  • use_config_enable_qty_increments
  • enable_qty_increments
2 голосов
/ 25 сентября 2017
function updateProductStock($productId, $qty) { 
    $resource = Mage::getSingleton('core/resource');
    $write = $resource->getConnection('core_write');
    $write->update(
      "cataloginventory_stock_item"
    , array("qty" => $qty, 'is_in_stock' => ($qty > 0 ? 1 : 0))
    , "product_id = " . $productId
    );
} 
2 голосов
/ 24 июня 2016

Вы можете обновить свой инвентарь с помощью sql, но из-за модели EAV Magento, sql может быть немного громоздким - и вам действительно нужно спросить себя, почему вы хотите это сделать. В нашем случае, у нас есть обычный магазин, поэтому Magento не является нашим основным местом хранения инвентаря.

Сначала мы извлекаем UPC, стоимость, цену и количество из базы данных POS нашего магазина и преобразуем данные в операторы вставки sql, чтобы вставить данные во временную таблицу в нашей базе данных Magento:

CREATE TABLE Temp_Inventory (
`UPC` varchar(40) NOT NULL,
`ItemName` varchar(60) NOT NULL,
`Cost` float NOT NULL,
`Price` float NOT NULL,
`In_Stock` float NOT NULL,
`Helper_ItemNum` varchar(40) DEFAULT NULL,
 UNIQUE KEY `Temp_Inventory_IN` (`UPC`),
 KEY `Temp_Inventory_H` (`Helper_ItemNum`));

delete from Temp_Inventory;
insert into Temp_Inventory (UPC, ItemName, Cost, Price, In_Stock) values ("132456789123", "Item Description", 9.6667, 14.9900, 14);

Мы используем UPC в качестве нашего первичного ключа, но Magento использует свой собственный ключ, поэтому мы добавили атрибут «UPC» (кодированный «upc») в базу данных Magento, чтобы мы могли сопоставлять элементы между системами. Сначала нам нужно заполнить нашу временную таблицу идентификатором элемента Magento.

 update Temp_Inventory set Helper_ItemNum =
    (select catalog_product_entity.entity_id
    from catalog_product_entity, catalog_product_entity_varchar, eav_attribute
    where eav_attribute.attribute_code = "upc"
    and catalog_product_entity_varchar.entity_type_id = eav_attribute.entity_type_id
    and catalog_product_entity_varchar.attribute_id = eav_attribute.attribute_id
    and catalog_product_entity_varchar.entity_id = catalog_product_entity.entity_id
    and catalog_product_entity_varchar.value = UPC);

Затем нам нужно обновить значения инвентаря, убедившись, что мы обновляем только те элементы, для которых у нас есть значения:

update cataloginventory_stock_item set qty =
    (select In_Stock
    from Temp_Inventory
    where Helper_ItemNum = cataloginventory_stock_item.item_id)
 where cataloginventory_stock_item.item_id in (select Helper_ItemNum from Temp_Inventory);

Стоимость и цена могут быть обновлены аналогичным образом с использованием таблицы catalog_product_entity_decimal.

Затем мы обновляем статус наличия на складе по сравнению с отсутствием на складе:

update cataloginventory_stock_item set is_in_stock = 1
where cataloginventory_stock_item.item_id in (select Helper_ItemNum from Temp_Inventory)
and cataloginventory_stock_item.qty > 0;

update cataloginventory_stock_item set is_in_stock = 0
where cataloginventory_stock_item.item_id in (select Helper_ItemNum from Temp_Inventory)
and cataloginventory_stock_item.qty <= 0;

Наконец, нам нужно переиндексировать состояние акций, поэтому наш сайт показывает его правильно:

php -f /path/to/magento/shell/indexer.php -- --reindex cataloginventory_stock
2 голосов
/ 24 мая 2011

Используется в цикле foreach для продукта, вы можете изменить следующий код:

$newstocklevel = 100;

$product_id = Mage::getModel('catalog/product')->getIdBySku(321);
$product = Mage::getModel('catalog/product');
$product ->load($product_id);
$stockData = $product->getStockData();
$stockData['qty'] = $newstocklevel;
$stockData['is_in_stock'] = 1;

$product->setStockData($stockData);

$product->save();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...