Вы можете обновить свой инвентарь с помощью 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