Magento – IN STOCK FILTER FOR Magento 2 Product collection

collection;filtermagento2.2.2productstock

i am trying to filter inStock product in Magento 2 Using
I am trying to filter inStock product in Magento 2 Using

\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $collectionFactory,

by

$collection = $this->_collectionFactory->create();
        $collection->addAttributeToSelect('*');
        //$collection->addAttributeToFilter('rand()');
        //$collection->addAttributeToFilter('flavor',$flavorId);
        $collection->addCategoriesFilter(['in' => $searchCategory]);
        $collection->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()]);
        $collection->setVisibility($this->productVisibility->getVisibleInSiteIds());
        $collection->getSelect()->orderRand();
        $collection->setPageSize(3);
        $collection->getSelect()->orderRand();
        $collection->joinField(
        'qty', 'csvp_cataloginventory_stock_item', 'qty', 'product_id=entity_id', '{{table}}.stock_id=2', 'left'
            );
        //$collection->joinField('stock_item', 'cataloginventory_stock_item', 'qty', 'product_id=entity_id', 'qty=0');
        return $collection;

but the result is also shown out of stock products.
can any one suggest me how to get only in stock products collection.

Best Answer

You can also try below code

$pCollection = $this->getObjectManager()->create('Magento\Catalog\Model\ResourceModel\Product\Collection');
        $pCollection->setStoreId($storeId);
        $pCollection->addAttributeToSelect('*');
        $pCollection->addFieldToFilter('visibility', array('neq' => \Magento\Catalog\Model\Product\Visibility::VISIBILITY_NOT_VISIBLE));
        $pCollection->addFieldToFilter('status', array('eq' => \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED));
$pCollection->joinField(
    'stock_status', 'cataloginventory_stock_status', 'stock_status', 'product_id=entity_id', '{{table}}.stock_id=1', 'left'
)->addFieldToFilter('stock_status', array('eq' => \Magento\CatalogInventory\Model\Stock\Status::STATUS_IN_STOCK));

Thanks

Related Topic