How to get product stock qty and stock information by product id in Magento 2?

You can get Product stock related information using the Catalog Inventory module of Magento 2.

Magento\CatalogInventory\Api\StockRegistryInterface is used for getting Stock Information from the Product.

If you want to only get Product Quantity and Product status might be it’s in stock or not then refer Get Product quantity from product object

Let’ create Block file and call function from a block,

<?php
namespace Rbj\Stockinfo\Block;

class Stockinfo extends \Magento\Framework\View\Element\Template
{
    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\CatalogInventory\Api\StockRegistryInterface $stockItemRepository,
        array $data = []
    )
    {
        $this->stockItemRepository = $stockItemRepository;
        parent::__construct($context, $data);
    }
    /* Using Product id */
    public function getStockItem($productId)
    {
        return $this->stockItemRepository->getStockItem($productId);
    }
    /* Using Product SKU */
    public function getStockItemBySku($productSku)
    {
        return $this->stockItemRepository->getStockItemBySku($productSku);
    }
}

Now, We can get the product stock information by id and SKU in a template file using the below way.

$id = 1; //Product id
/* by Product id */
$productStockById = $block->getStockItem($id);

/* by Product SKU */
$sku = '24-MB01';
$productStockBySku = $block->getStockItemBySku($sku);
echo "<pre>";print_r($productStockBySku->debug());

The output will be something like below,

Array
(
    [item_id] => 1
    [product_id] => 1
    [stock_id] => 1
    [qty] => 100.0000
    [min_qty] => 0.0000
    [use_config_min_qty] => 1
    [is_qty_decimal] => 0
    [backorders] => 0
    [use_config_backorders] => 1
    [min_sale_qty] => 1.0000
    [use_config_min_sale_qty] => 1
    [max_sale_qty] => 10000.0000
    [use_config_max_sale_qty] => 1
    [is_in_stock] => 1
    [notify_stock_qty] => 1.0000
    [use_config_notify_stock_qty] => 1
    [manage_stock] => 1
    [use_config_manage_stock] => 1
    [stock_status_changed_auto] => 0
    [use_config_qty_increments] => 1
    [qty_increments] => 1.0000
    [use_config_enable_qty_inc] => 1
    [enable_qty_increments] => 0
    [is_decimal_divided] => 0
    [website_id] => 0
    [type_id] => simple
)

You can get qty, min_sale_qty, is_in_stock, backorder, stock_id, website_id related data with ease.

How to get product available qty in Magento 2?

Get Product qty or stock information by Product Object is pretty easy in Magento 2.

We can simply get product qty from the product id and get the first product object. We can get product data from either by id or by SKU.

Please check below code snippet for getting product qty in Magento 2,

<?php
namespace Rbj\Training\Block;

class Product extends \Magento\Framework\View\Element\Template
{
    protected $stockItemRepository;

    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\CatalogInventory\Model\Stock\StockItemRepository $stockItemRepository,
        array $data = []
    ) {
        $this->stockItemRepository = $stockItemRepository;
        parent::__construct($context, $data);
    }

    public function getProductQty($id)
    {
        return $this->stockItemRepository->get($id);
    }
}

Call template file by below code,

$product_id = 1; //product id
$stock = $block->getProductQty($product_id);
echo $stock->getQty(); // product qty
echo $stock->getMinQty();
echo $stock->getMaxQty();
echo $stock->getIsInStock(); // is in stock return as boolean

You can fetch the Product Stock related data using the above Stock object.