Magento 2 Не Удалось Получить Простое Количество Продукта


Я не могу получить количество простого продукта Кто-нибудь может помочь, пожалуйста.

Я пробовал:

$product = $block->getAllowProducts();

foreach ($product  as $child) {
    print_r($child->getQty());
    print_r($child);
}

$child->getQty() ничего не возвращает, и, похоже, его тоже нет в массиве $child

Array
(
  [entity_id] => 1
  [attribute_set_id] => 4
  [type_id] => simple
  [sku] => t-shirt-red
  [has_options] => 0
  [required_options] => 0
  [created_at] => 2017-10-24 10:05:40
  [updated_at] => 2017-10-24 10:05:40
  [parent_id] => 4
  [catalog_rule_price] => 
  [name] => t-shirt-red
  [url_key] => t-shirt-red
  [price] => 99.9900
  [weight] => 100.0000
  [color] => 4
  [status] => 1
  [tax_class_id] => 2
  [is_featured] => 1
  [media_gallery] => Array
    (
      [images] => Array
        (
        )

      [values] => Array
         (
         )

    )

[tier_price] => Array
    (
    )

[salable] => 1
)

Любая помощь, пожалуйста, цените. Спасибо!

Author: Juliano Vargas, 2017-10-24

2 answers

Вы не можете напрямую получить количество продукта. Вам нужно позвонить StockStateInterface, чтобы узнать количество товара.

Для получения количества на основе идентификатора продукта,

public function __construct(\Magento\CatalogInventory\Api\StockStateInterface $stockState)
{        
    $this->stockState = $stockState;
}

public function getOptionsQty($currentProduct, $allowedProducts)
{
    $product = $block->getAllowProducts();

    foreach ($product  as $child) {
        $productId = $child->getId();
        $qty = $this->stockState->getStockQty($productId,1);          
        echo $qty;
        print_r($child);
    }
}

Использование непосредственно objectmanager,

$product = $block->getAllowProducts();

    foreach ($product  as $child) {
        $productId = $child->getId();
        $objectManager = \Magento\Framework\App\ObjectManager::getInstance();
        $stockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');
        $qty = $stockState->getStockQty($productId,1);
        echo $qty;
        print_r($child);
    }
 1
Author: Rakesh Jesadiya, 2017-10-26 04:51:57

Вы можете использовать это, чтобы получить количество.

$products = Mage::getModel('catalog/product')
     ->getCollection()
     //->addAttributeToSelect('*')
     ->addAttributeToSelect(array('name', 'thumbnail', 'weight' ,'price','description'))
     ->joinField('qty',
                 'cataloginventory/stock_item',
                 'qty',
                 'product_id=entity_id',
                 '{{table}}.stock_id=1',
                 'left');


foreach ($products as $product) {
  $p['products'][] = array(
        'id'        => $product->getId(),
        'sku'       => $product->getSku(),
        'name'      => $product->getName(),
    'description'   => $product->getDescription(),
      'weight'      => $product->getWeight(),
    'created at'    => $product->getCreatedAt(),
        'pirce'     => Mage::helper('core')->currency($product->getPrice(), true, false), //." ".$currencyCode,

     //get qty
     'qty'          => $product->getQty(),
     );
 }
 1
Author: Vivek, 2017-10-24 10:19:44