Magento 2: Set product stock programmatically
-
14-04-2021 - |
문제
I have to setup Product 'in stock' and update Quantity programmatically. Here is my code I am trying:
$product->setData('is_in_stock', 1);
$product->setData('qty', 5);
$product->save();
해결책
Can you please try below code? It will save inventory data.
$product->setStockData(['qty' => $stockData, 'is_in_stock' => $stockData]);
$product->setQuantityAndStockStatus(['qty' => $stockData, 'is_in_stock' => $stockData]);
$product->save();
다른 팁
In Magento 2.3 was deprecated change stock directly via setStockData(...) Instead of it, you MUST use this way for updating product stock
- Init product stock repository
public function __construct(
\Magento\InventoryApi\Api\StockRepositoryInterface $productStockRepository
) {
$this->productStockRepository = $productStockRepository;
}
- Use Repository for product stock update
$productStock = $productStockRepository->get($entity->getId());
$productStock->setStockData(['is_in_stock' => false]);
$productStockRepository->save($productStock);
In case if you don't use Multi Source Inventory (Magento_InventoryApi extesions), you can update product stock this way:
- Init product stock registry
public function __construct(
\Magento\InventoryApi\Api\StockRepositoryInterface $productStockRepository
) {
$this->productStockRepository = $productStockRepository;
}
- Get product stock item and change product stock
$productStock = $productStockRegistry->getStockItem($entity->getId());
$productStock = $productStockRepository->get($entity->getId());
$productStock->setIsInStock(true);
$productStock->setQty(10);
$productStock->save();
제휴하지 않습니다 magento.stackexchange