We are currently showing our available qty in stock on the frontend of each product using the following code:

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
    $qty = $StockState->getStockQty($_product->getId());

But when we enable the new MSI feature in Magento 2 the above code always outputs 0. How are we able to show the total salable qty in the frontend of all inventory sources?


I found out that when I enable the Default source and assign it to a product and give it for example 10pcs. The above code outputs 10, so the above code doesnt take all the inventory sources into count. It should show the total salable qty like its showing in the backend.

Edit 2:

Explanation with images.

Default source enabled

With the above settings the above code outputs 10. It should output 25.

Default source disabled

When Default Source is unassigned the above code outputs 0. It should output 15.

  • Let us know in which file you want to show status ? – Narendra Vyas Mar 26 at 13:04
  • In app/design/frontend/Theme/default/Magento_Catalog/templates/product/view/type/default.phtml – JudgeB Mar 26 at 13:20
  • you want to show qty or only status ?? – Narendra Vyas Mar 26 at 13:31
  • I want to show qty in stock – JudgeB Mar 26 at 13:33

I found my own solution in the following piece of code:

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
    $StockState = $objectManager->get('\Magento\InventorySalesApi\Api\GetProductSalableQtyInterface');
    $qty = $StockState->execute($_product->getSku(), 2);

I hope it can be of help for others! :)

2 = $stockId


All the CatalogInventory interfaces including StockStateInterface are deprecated since Magento 2.3.1 You can see that in Magento source code, also they would be highlighted as deprecated if you are using PHP IDE for development. https://github.com/magento/magento2/blob/2.3-develop/app/code/Magento/CatalogInventory/Api/StockStateInterface.php#L13-L15

Since Magento 2.3 the proper way of getting salable quantity is next:

         /** @var \Magento\InventorySalesApi\Api\StockResolverInterface */
        $stockId = $this->stockResolver->execute(SalesChannelInterface::TYPE_WEBSITE, $websiteCode)->getStockId();
        /** @var \Magento\InventorySalesApi\Api\GetProductSalableQtyInterface */
        $qty = (int)$this->getProductSalableQty->execute($sku, $stockId);

Try this

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$StockState = $objectManager->get('\Magento\InventorySalesAdminUi\Model\GetSalableQuantityDataBySku');
$qty = $StockState->execute($_product->getSku());

Result should be

Array ( [0] => Array ( [stock_name] => other [qty] => 980 [manage_stock] => 1 ) ) 

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.