【问题标题】:Magento - update all products inventory with sqlMagento - 使用 sql 更新所有产品库存
【发布时间】:2011-08-31 17:26:22
【问题描述】:

我想更新所有 My Magento 产品的库存。

我可以只用一个 sql 请求来做到这一点吗?

如果可以的话,有什么要求?

非常感谢

【问题讨论】:

标签: magento


【解决方案1】:

这样的?

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_automatically
  • use_config_qty_increments
  • qty_increments
  • use_config_enable_qty_increments
  • enable_qty_increments

【讨论】:

    【解决方案2】:

    在产品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();
    

    【讨论】:

      【解决方案3】:

      您可以使用 sql 更新您的库存,但由于 Magento 的 EAV 模型,sql 可能有点麻烦 - 您真的需要问自己为什么要这样做。在我们的例子中,我们有一家实体店,因此 Magento 不是我们的主要库存存储位置。

      我们首先从我们的商店 POS 数据库中提取 UPC、成本、价格和数量,并将数据转换为 sql 插入语句,以将数据插入到我们 Magento db 中的临时表中:

      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 使用它自己的键,所以我们在 Magento DB 中添加了一个“UPC”属性(编码为“upc”),以便我们可以在系统之间匹配项目。首先,我们需要使用 Magento 项目 ID 填充我们的临时表。

       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 以类似的方式更新成本和价格。

      然后我们会更新库存状态 in-stock 与 out-of-stock:

      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
      

      【讨论】:

        【解决方案4】:
        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
            );
        } 
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-09
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多