0

How to get only disabled product In Controller I have getting all the products

<?php
namespace Mageplaza\HelloWorld\Controller\Index;

use Magento\Catalog\Model\Product\Attribute\Source\Status;
use Magento\Catalog\Model\ResourceModel\Product\Action;

class Index extends \Magento\Framework\App\Action\Action
{
protected $_pageFactory;
private $scopeConfig;
protected $_productCollectionFactory;
private $productAction;

public function __construct(
Action $productAction,
\Magento\Framework\App\Action\Context $context,
\Magento\Framework\App\Config\ScopeConfigInterface $scopeConfig,
\Magento\Framework\View\Result\PageFactory $pageFactory,
\Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
){
$this->productAction = $productAction;
$this->_pageFactory = $pageFactory;
$this->scopeConfig = $scopeConfig;
$this->_productCollectionFactory = $productCollectionFactory;
return parent::__construct($context);
}

public function execute()
{   
$product_ids = [];

$onlydisproduct = $this->_productCollectionFactory->create();
$onlydisproduct->addAttributeToSelect('*');
$onlydisproduct->setFlag('has_stock_status_filter', false);
foreach ($onlydisproduct as $key => $value) {
    $product_ids[] = $value->getId();
}
//print_r($product_ids);




die('aaaa');
//return $this->_pageFactory->create();
}
}

Product Screenshot

enter image description here I am applying $onlydisproduct->setFlag('has_stock_status_filter', false); but still getting all products.

6
  • what's your magento version? Commented Aug 21, 2020 at 9:46
  • do you want disable product or out of stock product? Commented Aug 21, 2020 at 9:47
  • If you need disabled you bneed that : ->addAttributeToFilter('status', \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED)
    – Claims
    Commented Aug 21, 2020 at 9:53
  • My magento version Magento ver. 2.3.5-p1 @RohanHapani
    – Prits
    Commented Aug 21, 2020 at 9:54
  • I want Disabled Product @DhirenVasoya
    – Prits
    Commented Aug 21, 2020 at 9:54

2 Answers 2

0

Replace this below code in your controller and cache clean :

        $product_ids = [];
        $onlydisproduct = $this->_productCollectionFactory->create()
            ->addAttributeToSelect('*')
            ->addAttributeToFilter('status', \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
        foreach ($onlydisproduct as $key => $value) {
            $product_ids[] = $value->getId();
        }
        echo "<pre/>";
        print_r($product_ids);
        exit;
7
  • It gives me an empty array @Rohan
    – Prits
    Commented Aug 21, 2020 at 10:05
  • Did you get product collection? or have you disabled products in your product list? Commented Aug 21, 2020 at 10:17
  • How do i check for product collection on var_dump it gives me Allowed memory size of 792723456 bytes exhausted @Rohan
    – Prits
    Commented Aug 21, 2020 at 10:39
  • print_r($onlydisproduct->getData()); just do it. Commented Aug 21, 2020 at 10:41
  • Did you get collection? @Prits Commented Aug 21, 2020 at 10:49
0

Replace your code like this one :

$onlydisproduct = $this->_productCollectionFactory->create();
$onlydisproduct->addAttributeToSelect('*');
$onlydisproduct->addAttributeToFilter('status', \Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_DISABLED);
9
  • It gives me an empty array @Dhiren
    – Prits
    Commented Aug 21, 2020 at 10:08
  • Kindly check that you have some disable product into system. Commented Aug 21, 2020 at 10:14
  • Yes i have disabled product in my system @Dhiren
    – Prits
    Commented Aug 21, 2020 at 10:33
  • Then above code must work, have you check by caching and indexing commands. Commented Aug 21, 2020 at 10:38
  • Flushed all cached and indexer done but still no success@Dhiren
    – Prits
    Commented Aug 21, 2020 at 10:49

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.