2016-09-10 2 views

ответ

3

Если мы посмотрим на StockItemRepository класс get метод хочет параметр $stockItemId, а не $productId. Справка:

https://github.com/magento/magento2/blob/develop/app/code/Magento/CatalogInventory/Model/Stock/StockItemRepository.php#L202

Я видел много сайтов, где фондовый идентификатор элемента НЕ же, как идентификатор продукта, и мы не должны считать, что это тот же идентификатор.

Для того, чтобы получить эту работу, вы можете использовать класс \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; 
     } 
    } 
} 
0

этот код поможет вам получить количество продукта

<?php 
    $objectManager = \Magento\Framework\App\ObjectManager::getInstance(); 
    $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface'); 
    echo $StockState->getStockQty($productId); 
?> 
3

На самом деле эта операция должна быть выполнена с использованием \ Magento \ CatalogInventory \ Api \ StockRegistryInterface и здесь мы можем получить \ Magento \ CatalogInventory \ Api \ Data \ StockItemInterface, по идентификатору продукта или по sku, и мы можем использовать кучу полезных методов s, чтобы получить информацию о продукте, связанную с продуктом. Для получения общей информации акций я рекомендую изучить другие сервисные контракты, объявленным в 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); 
    } 
} 
+0

Это работает для меня, как описано в [выпуске GitHub] (HTTPS://github.com/magento/magento2/issues/8279) – nshiff

+0

Как получить это с помощью SQL Query в редакторе SQL? –

+0

Вам не следует использовать прямые запросы 'sql' в вашем коде. –