如何在以编程方式导入magento产品时填充库存表


How to populate stock tables when programatically importing magento products

我有一个Magento输入脚本,我已经写了解析一个csv文件,我已经提供到Magento。它成功地将产品传递到magento,但是它们在站点上显示为"缺货",尽管它们在管理区域被标记为"库存"answers"已启用"。

在说服自己这不是进口产品的库存选项卡中的设置之后,我一直在查看magento代码,并确定"is_salable"是定义的,并且为每个产品返回null。进一步调查发现cataloginventory_stock_status表为空。

我一直在谷歌搜索这个问题,以确定为什么股票表没有在数据库中设置,尽管导入脚本似乎没有出现任何错误,但找不到答案。

有没有人看到我在这里错过了什么,提前感谢任何人可以提供的任何帮助或建议。下面是负责导入产品的代码的主要部分:

$product = Mage::getModel('catalog/product');
$product
    ->setWebsiteIds(array(Mage::app()->getStore(true)->getWebsite()->getId()))
    ->setAttributeSetId(4)
    ->setTypeId(Mage_Catalog_Model_Product_Type::TYPE_SIMPLE)
    ->setCreatedAt(strtotime('now'))
    ->setUpdatedAt(strtotime('now'))
    ->setSku($data[2])
    ->setName($data[5])
    ->setWeight(4.0000)
    ->setStatus(1)
    ->setTaxClassId(4)
    ->setVisibility(Mage_Catalog_Model_Product_Visibility::VISIBILITY_BOTH)
    ->setPrice($data[21])
    ->setCost($data[21])
    ->setSpecialPrice($data[21])
    ->setSpecialFromDate('06/1/2014')
    ->setSpecialToDate('06/30/2014')
    ->setMsrpEnabled(1)
    ->setMsrpDisplayActualPriceType(1)
    ->setMsrp($data[21])
    ->setMetaTitle('test meta title 2')
    ->setMetaKeyword('test meta keyword 2')
    ->setMetaDescription('test meta description 2')
    ->setDescription($data[7])
    ->setShortDescription($data[6])
    ->setMediaGallery (array('images'=>array(), 'values'=>array()))
    ->setStockData(array(
        'use_config_manage_stock' => 1,
        'qty' => 100,
        'min_qty' => 0,
        'use_config_min_qty'=>1,
        'min_sale_qty' => 0,
        'use_config_min_sale_qty'=>1,
        'max_sale_qty' => 9999,
        'use_config_max_sale_qty'=>1,
        'is_qty_decimal' => 0,
        'backorders' => 0,
        'notify_stock_qty' => 1,
        'is_in_stock' => 1
    ))
    ->setCategoryIds(array(3))
    ->save();

您需要调用库存项目而不是在产品中设置。我使用类似的东西来设置股票数据:

    $stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
    $stockItemId = $stockItem->getId();
    $stock = array();
    if (!$stockItemId) {
        $stockItem->setData('product_id', $product->getId());
        $stockItem->setData('stock_id', 1);
    } else {
        $stock = $stockItem->getData();
    }
    $StockData['qty'] = 12;
    $StockData['is_in_stock'] = 1;
    $StockData['manage_stock'] = 1;
    $StockData['use_config_manage_stock'] = 0;
    $StockData['use_config_min_qty'] = 0;
    foreach($StockData as $field => $value) {
        $stockItem->setData($field, $value?$value:0);
        Mage::log($field.'=>'.$value);
    }
    $stockItem->save();