You can create a Helper class (as given below ) to update product inventory as you want .
Assume you are using a custom extension Company_MyModule
<?php
namespace Company\MyModule\Helper;
use Magento\Framework\App\Filesystem\DirectoryList;
class Data extends \Magento\Framework\App\Helper\AbstractHelper
{
/**
* @var Magento\Catalog\Api\ProductRepositoryInterface
*/
protected $_productRepository;
/**
* @var Magento\CatalogInventory\Api\StockStateInterface
*/
protected $_stockStateInterface;
/**
* @var Magento\CatalogInventory\Api\StockRegistryInterface
*/
protected $_stockRegistry;
/**
* @param Magento\Framework\App\Helper\Context $context
* @param Magento\Catalog\Api\ProductRepositoryInterface $productRepository
* @param Magento\CatalogInventory\Api\StockStateInterface $stockStateInterface,
* @param Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
*/
public function __construct(
\Magento\Framework\App\Helper\Context $context,
\Magento\Catalog\Api\ProductRepositoryInterface $productRepository,
\Magento\CatalogInventory\Api\StockStateInterface $stockStateInterface,
\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry
) {
$this->_productRepository = $productRepository;
$this->_stockStateInterface = $stockStateInterface;
$this->_stockRegistry = $stockRegistry;
parent::__construct($context);
}
/**
* For Update stock of product
* @param int $productId which stock you want to update
* @param array $stockData your updated data
* @return void
*/
public function updateProductStock($productId,$stockData) {
$product = $this->_productRepository->getById($productId); //load product which you want to update stock
$productSku = $product->getSku();
$stockItem = $this->_stockRegistry->getStockItemBySku($productSku); // load stock of that product by SKU
$stockItem->setIsInStock($stockData['is_in_stock']); //set updated data as your requirement
$stockItem->setQty($stockData['qty']); //set updated quantity
$stockItem->setManageStock($stockData['manage_stock']);
$this->_stockRegistry->updateStockItemBySku($productSku,$stockItem);
}
}