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

Magento2 Magento 2:获取产品库存数量和其他库存信息,magento2,Magento2,Magento 2:获取产品库存数量和其他库存信息 如何在magento 2中获取产品库存数量和信息如果我们查看StockItemRepository类,get方法需要参数$stockItemId,而不是$productId。参考: 我见过很多网站的库存商品id和产品id不一样,我们不应该假设它是相同的id 要实现此功能,您可以使用\Magento\CatalogInventory\Model\Stock\Item类,并通过产品id字段加载模型。我也知道website\u id和stock\u

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


如何在magento 2中获取产品库存数量和信息如果我们查看StockItemRepository类,
get
方法需要参数
$stockItemId
,而不是
$productId
。参考:

我见过很多网站的库存商品id和产品id不一样,我们不应该假设它是相同的id

要实现此功能,您可以使用
\Magento\CatalogInventory\Model\Stock\Item
类,并通过
产品id
字段加载模型。我也知道
website\u id
stock\u id
字段,但据我所知,它还没有被使用(还没有),也存在于M1中

它应该是这样的(未测试的代码):


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

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

实际上,这个操作应该使用\Magento\CatalogInventory\Api\StockRegistryInterface执行,在这里我们可以通过产品id或sku获得\Magento\CatalogInventory\Api\Data\StockItemInterface,我们可以使用一系列有用的方法来获取与产品相关的库存信息。对于一般库存信息,我建议浏览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);
    }
}

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

echo $_product->getExtensionAttributes()->getStockItem()->getQty();
conplete对象可按如下方式找到:

var_dump($_product->getExtensionAttributes()->getStockItem()->getData());
学分:

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

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

StockStatus接口与之相反。它应该用于“读取”数据以进行表示(在前端)。将SturtStices视为包含每个特定产品的汇总股票数据的索引。 因此,如果您想通过产品标识获取产品库存状态(库存中、缺货)。 您需要使用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;

如果您有product对象,但不想使用其他类,可以按以下方式尝试

// 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();

这对我来说很有效,正如a中所描述的,您不应该在代码中使用直接
sql
查询。这就是它的工作方式!!检查详细信息并回答。
// 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();