Magento 2:获取产品库存数量和其他库存信息

时间:2016-09-10 08:59:51

标签: magento2

Magento 2:获取产品库存数量和其他库存信息

如何获取magento 2中的产品库存数量和信息

5 个答案:

答案 0 :(得分:4)

实际上这个操作应该使用 \ Magento \ CatalogInventory \ Api \ StockRegistryInterface 来执行,这里我们可以按产品获得 \ Magento \ CatalogInventory \ Api \ Data \ StockItemInterface id或sku,我们可以使用一堆有用的方法来获取股票信息 - 链接产品。对于一般股票信息,我建议探索在 Magento \ CatalogInventory \ Api

中声明的其他服务合约

使用示例:

<?php
namespace Test\Test\Model;
class Test
{
    protected $_stockRegistry;
    public function __construct(\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry)
    {
        $this->_stockRegistry = $stockRegistry;
    }
    public function getStockItem($productId)
    {
        return $this->_stockRegistry->getStockItem($productId);
    }
}

答案 1 :(得分:1)

此代码可帮助您获取产品数量

<?php 
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
    echo $StockState->getStockQty($productId);
?>

答案 2 :(得分:1)

如果您有产品对象,则只需使用以下内容:

echo $_product->getExtensionAttributes()->getStockItem()->getQty();

完整对象可以找到如下:

var_dump($_product->getExtensionAttributes()->getStockItem()->getData());

答案 3 :(得分:0)

积分: https://github.com/magento/magento2/issues/7057#issuecomment-256052729

实际上\ Magento \ CatalogInventory \ Api \ Data \ StockStatusInterface 应该回答您所有的问题。

长话短说: Magento具有StockItem实体,该实体表示具体库存(stockId)上特定产品(productId)的数量(Qty)。 当您要将数据“写入”到数据存储中时(例如,更新产品数量以将Magento与您的ERP系统同步或在结帐过程中扣除库存时),应使用StockItemInterface。

StockStatusInterface与之相反。它应该用于“读取”表示的数据(在前端)。将StockStatus视为一个索引,其中包含每个特定产品的汇总库存数据。

因此,如果您想通过product_id获取产品库存状态(有货,无货)。 您需要使用StockStatusRepositoryInterface :: getList(StockStatusCriteriaInterface $ searchCriteria); 获取指定产品的StockStatus实体

/** @var \Magento\CatalogInventory\Api\StockStatusCriteriaInterfaceFactory $stockStatusCriteriaFactory **/
        $criteria = $stockStatusCriteriaFactory->create();
        $criteria->setProductsFilter($productId);
        /** @var \Magento\CatalogInventory\Api\Data\StockStatusRepositoryInterface $stockStatusRepository **/
        $result = $stockStatusRepository->getList($criteria);
        $stockStatus = current($result->getItems());
        $stockStatus->getProductId();                 // product id
        $stockStatus->getQty();   // quantity of specified product
        $stockStatus->getStockStatus();     // Could be 
// Magento\CatalogInventory\Model\Stock\Status::STATUS_OUT_OF_STOCK = 0;
// or
// Magento\CatalogInventory\Model\Stock\Status::STATUS_IN_STOCK = 1;

答案 4 :(得分:0)

如果你有产品对象,不想使用其他类,可以试试下面的方法。

// For phtml file
$prodObj = $_product->load($_product->getId()); // $_product object in list.phtml
$stockItem = $prodObj->getExtensionAttributes()->getStockItem();
$stockQty = $stockItem->getQty(); // $stockItemData = $stockItem->getData();

// For php class file
$stockItem = $prodObj->getExtensionAttributes()->getStockItem();
$stockQty = $stockItem->getQty(); // $stockItemData = $stockItem->getData();