Như trong các câu trả lời khác, người ta có thể sử dụng lớp Mage_CatalogInventory_Model_Stock_Item
trực tiếp. Nhưng người ta phải tham chiếu chính xác sản phẩm thông qua một cuộc gọi setProduct
để có mã làm việc cho cả các mặt hàng chứng khoán mới và hiện có.
$stockItem = Mage::getModel('cataloginventory/stock_item')->loadByProduct($product->getId());
$stockItem->setProduct($product)
->setData('stock_id', Mage_CatalogInventory_Model_Stock::DEFAULT_STOCK_ID)
->setData('qty', 1)
->setData('is_in_stock', 1)
->setData('manage_stock', 1)
->setData('use_config_manage_stock', 0)
->setData('use_config_backorders', 0)
->setData('backorders', 0)
->setData('use_config_max_sale_qty', 0)
->setData('max_sale_qty', 1)
->save();
Giải pháp thay thế
Tuy nhiên nếu bạn gọi bằng $product->save
mọi cách tôi sẽ chỉ thiết lập dữ liệu chứng khoán $product->setStockdata($array)
như sau. Cách này Magento tạo ra một mục chứng khoán chính xác từ dữ liệu chứng khoán. Ưu điểm lớn là cập nhật mục chứng khoán xảy ra trong cùng một giao dịch $product->save()
. Điều này rất quan trọng đối với tính nhất quán của dữ liệu.
$stockData = array();
$stockData['qty'] = 1;
$stockData['is_in_stock'] = 1;
$stockData['manage_stock'] = 1;
$stockData['use_config_manage_stock'] = 0;
$stockData['use_config_backorders'] = 0;
$stockData['backorders'] = 0;
$stockData['use_config_max_sale_qty'] = 0;
$stockData['max_sale_qty'] = 1;
$product->setStockData($stockData);
//...
$product->save()