How to get stock status by SKU Magento 2?

Magento 2, You can get stock status by Product SKU. If you want to load Stock details using SKU, you can get the details of the Stock related information.

You need to use Magento\CatalogInventory\Model\StockRegistry to fetch stock status.

Using Stock Status Data, You can get the stock related info at the Website level, Stock is in stock, Backorder status, Qty, ProductId, Min. Qty, Manage Stock and many other stock field data.

<?php
namespace Jesadiya\StockStatus\Model;

use Psr\Log\LoggerInterface;
use Magento\Store\Model\StoreManagerInterface;
use Magento\CatalogInventory\Model\StockRegistry;

class StockStatus
{
    /** @var LoggerInterface */
    protected $logger;

    /**
     * @var StoreManagerInterface
     */
    private $storeManager;

    /**
     * @var StockRegistry
     */
    private $stockRegistry;

    public function __construct(
        LoggerInterface $logger,
        StoreManagerInterface $storeManager,
        StockRegistry $stockRegistry,
    ) {
        $this->logger = $logger;
        $this->stockRegistry = $stockRegistry;
        $this->storeManager = $storeManager;
    }

    /**
     * country full name
     *
     * @return string
     */
    public function getStockStatus($sku)
    {
        $stockData = null;
        try {
            $stockStatus = $this->stockRegistry->getStockStatusBySku(
                $sku,
                $this->storeManager->getWebsite()->getId()
            );

            $stockData = $stockStatus->getStockItem();

        } catch (\Exception $exception) {
            $this->logger->error($exception->getMessage());
        }
        return $stockData;
    }
}

Get the stock status using SKU value as a method parameter,

$sku = '111A1234';
$stockData = $this->getStockStatus($sku);
var_dump($stockData->debug());

When you debug the Stock data you got all the required information of the Product Stock.

One Reply to “How to get stock status by SKU Magento 2?”

  1. Is it right to use model of StockRegistry bypass of Inventory API Service Contract ?
    Even with using API interface MagentoCatalogInventoryApiStockRegistryInterface which StockRegistry implements, we still will use deprecated API.
    MagentoInventoryApiApi* should be used in this case.
    Also, your method getStockStatus returns ?MagentoCatalogInventoryApiDataStockItemInterface (since MagentoFrameworkExceptionNoSuchEntityException) instead of string.
    Thank you

Leave a Reply