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

Vis*_*ita 4 magento2

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

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

Rob*_*ban 7

如果我们查看StockItemRepository类,该get方法需要参数$stockItemId,而不是$productId.参考:

https://github.com/magento/magento2/blob/develop/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php#L202

我见过许多库存商品ID与产品ID不同的网站,我们不应该假设它是相同的ID.

为了实现这一点,您可以使用\Magento\CatalogInventory\Model\Stock\Item类而不是按product_id字段加载模型.我也知道这些website_idstock_id领域,但据我所知它还没有使用(还)并且也存在于M1中.

它应该看起来像这样(代码未测试):

<?php

namespace Vendor\Module\Model;

use \Magento\CatalogInventory\Model\Stock\Item;

class Mymodel
{
    /**
     * @var Item
     */
    protected $stockItem;

    /**
     * Mymodel constructor.
     *
     * @param Item $stockItem
     */
    public function __construct(Item $stockItem)
    {
        $this->stockItem = $stockItem;
    }

    /**
     * Description
     *
     * @param $productModel
     */
    public function getStockQtyByProductId($productModel)
    {
        try {
            $stockItem = $this->stockItem->load($productModel->getId(), 'product_id');

            return $stockItem->getQty();
        } catch (\Exception $e) {
            echo 'Something went wrong and was not handled: ' . $e->getMessage();
            exit;
        }
    }
}
Run Code Online (Sandbox Code Playgroud)


Has*_*zad 7

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

echo $_product->getExtensionAttributes()->getStockItem()->getQty();
Run Code Online (Sandbox Code Playgroud)

完整的对象可以如下找到:

var_dump($_product->getExtensionAttributes()->getStockItem()->getData());
Run Code Online (Sandbox Code Playgroud)


Bar*_*cki 5

实际上这个操作应该使用\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);
    }
}
Run Code Online (Sandbox Code Playgroud)