如果我们查看StockItemRepository类,该get方法需要参数$stockItemId,而不是$productId.参考:
我见过许多库存商品ID与产品ID不同的网站,我们不应该假设它是相同的ID.
为了实现这一点,您可以使用\Magento\CatalogInventory\Model\Stock\Item类而不是按product_id字段加载模型.我也知道这些website_id和stock_id领域,但据我所知它还没有使用(还)并且也存在于M1中.
它应该看起来像这样(代码未测试):
<?php
namespace Vendor\Module\Model;
use \Magento\CatalogInventory\Model\Stock\Item;
class Mymodel
{
/**
* @var Item
*/
protected $stockItem;
/**
* Mymodel constructor.
*
* @param Item $stockItem
*/
public function __construct(Item $stockItem)
{
$this->stockItem = $stockItem;
}
/**
* Description
*
* @param $productModel
*/
public function getStockQtyByProductId($productModel)
{
try {
$stockItem = $this->stockItem->load($productModel->getId(), 'product_id');
return $stockItem->getQty();
} catch (\Exception $e) {
echo 'Something went wrong and was not handled: ' . $e->getMessage();
exit;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果您有产品对象,则只需使用以下内容:
echo $_product->getExtensionAttributes()->getStockItem()->getQty();
Run Code Online (Sandbox Code Playgroud)
完整的对象可以如下找到:
var_dump($_product->getExtensionAttributes()->getStockItem()->getData());
Run Code Online (Sandbox Code Playgroud)
实际上这个操作应该使用\Magento\CatalogInventory\Api\StockRegistryInterface来执行,在这里我们可以通过产品 id 或 sku获取\Magento\CatalogInventory\Api\Data\StockItemInterface,我们可以使用一堆有用的方法来获取库存信息 - 链接产品。对于一般库存信息,我建议探索在Magento\CatalogInventory\Api 中声明的其他服务合同
用法示例:
<?php
namespace Test\Test\Model;
class Test
{
protected $_stockRegistry;
public function __construct(\Magento\CatalogInventory\Api\StockRegistryInterface $stockRegistry)
{
$this->_stockRegistry = $stockRegistry;
}
public function getStockItem($productId)
{
return $this->_stockRegistry->getStockItem($productId);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
17418 次 |
| 最近记录: |