Magento 2:获取产品库存数量和其他库存信息
如何获取magento 2中的产品库存数量和信息
答案 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();