库存管理是电子商务管理中不可或缺的一部分。在某些情况下,出于许多不同的原因,我们需要获取产品的库存信息。例如,您需要检查产品是否有库存以将其显示在类别页面上,或者防止客户将缺货的产品添加到购物车等许多情况。 

在本文中,我们将逐步指导您获取产品库存 Magento 2。

从管理页面获取产品库存信息

作为管理员,您可以在分类产品网格中获取产品的库存信息:

或者在产品创建/编辑表单中,您可以编辑数量(每个来源)或查看产品的可销售数量。

对于开发人员

作为开发人员,您还需要了解产品库存信息,例如缺货状态、库存状态、剩余数量、最大数量、最小数量……以及许多其他信息。Magento 2 支持开发人员获取产品库存信息的一些方法。

使用StockItemRepository获取特定产品的库存信息

...
$productId = 620;
/** @var \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItem */

$stockItem = \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\CatalogInventory\Model\Stock\StockItemRepository::class)

// Retrieve backorders status
echo $stockItem->getBackorders();

// Get quantity of item remaining in stock
echo "qty: ".$stockItem->getQty();

// Get stock status
echo $stockItem->getIsInStock();

// Retrieve Maximum Qty Allowed in Shopping Cart data wrapper
echo "max sale qty: ".$stockItem->getMaxSaleQty();
...

使用GetSourceItemsDataBySku检索产品多源数量

...
// To retrieve product multi-source quantities, you can use GetSourceItemsDataBySku

/** @var \Magento\InventoryCatalogAdminUi\Model\GetSourceItemsDataBySku $sourceDataBySku */
//use ObjectManager to get \Magento\InventoryCatalogAdminUi\Model\GetSourceItemsDataBySku instance

$sku = "24-MB01"; //sku of product

$sourceDataBySku = \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\InventoryCatalogAdminUi\Model\GetSourceItemsDataBySku::class);

//load quantities of assigned source
$data = $sourceDataBySku->execute($sku);

// the returned data should be an array including source name, source code, qty of the product in source, source status
// data = array(
//  array(
//      'source_code' => "example",
//      'quantity' => 100,
//      'status' => 1
//      'name' => "Example"
//      'source_status' => true
//)

...

产品存储库用于加载特定产品的所有信息。因此,它也用于获取股票信息。 

...
   //use product repository to get stock data
  $sku = "883985891715";
/** @var Magento\Catalog\Model\ProductRepository $productRepository */
   $productRepository = \Magento\Framework\App\ObjectManager::getInstance()->get(Magento\Catalog\Model\ProductRepository::class);
   $product = $productRepository->get($sku);
   if ($product){
       echo $product->isSalable(); // Check is product available for sale
       echo $product->isAvailable(); // Check whether the product type or stock allows to purchase the product
       echo $product->getQty(); get quantity of product

   }
...

产品集合对于获取产品列表中的库存信息也很有用。您还可以使用库存属性来过滤或从集合中获取数据。

...
/** @var \Magento\Catalog\Model\ResourceModel\Product\Collection $productCollection */
$productCollection = \Magento\Framework\App\ObjectManager::getInstance()->get(\Magento\Catalog\Model\ResourceModel\Product\Collection::class);

//use  salable option to filter product in collection
$data =  $productCollection
->addAttributeToFilter("is_saleable", 1)
->setPageSize(5)
->toArray();

...