Pregunta

I am trying to get all products with it's stock qty in magento2.
please let me know if anybody have solution.

¿Fue útil?

Solución

you can get all products with qty using below code

 <?php

    $objectManager = \Magento\Framework\App\ObjectManager::getInstance();

    $productCollection = $objectManager->create('Magento\Catalog\Model\ResourceModel\Product\CollectionFactory');
    $StockState = $objectManager->get('\Magento\CatalogInventory\Api\StockStateInterface');

    $collection = $productCollection->create()
                ->addAttributeToSelect('*')
                ->load();

    foreach ($collection as $product){

            echo $StockState->getStockQty($product->getId(), $product->getStore()->getWebsiteId());
            echo $product->getName();
    }  

    ?>

Otros consejos

Instead of using Object Manager, use dependency structure for good practise.

/**
 * @var \Magento\Framework\View\Result\PageFactory
*/
protected $productFactory;

public function __construct(
    .....
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productFactory
    .....
)
{
    .....
    $this->productFactory = $productFactory;
    .....
}
public function execute()
{
    $product = $this->productFactory->create();
    $product->addAttributeToSelect('*')->setFlag('has_stock_status_filter', true);
    $product = $product->joinField('qty',
            'cataloginventory_stock_item',
            'qty',
            'product_id=entity_id',
            '{{table}}.stock_id=1',
            'left'
        )->joinTable('cataloginventory_stock_item', 'product_id = entity_id', ['stock_status' => 'is_in_stock'])
        ->addAttributeToSelect('stock_status')
        ->addAttributeToSort('entity_id', 'DESC')
        ->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED)
        ->load();
    return $product;
}

Collection stock item from Resource Model

$resource = $objectManager->create('Magento\CatalogInventory\Model\ResourceModel\Stock\Item');
$select = $resource->getConnection()->select()->from($resource->getMainTable());
$stockItems = $resource->getConnection()->fetchAll($select);
foreach($stockItems as $_item){
    var_dump($_item->getData());
}

if you have product object then just use following:

var_dump($_product->getExtensionAttributes()->getStockItem()->getData());

I hope this will help

Licenciado bajo: CC-BY-SA con atribución
No afiliado a magento.stackexchange
scroll top