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? Aug 21, 2020 at 9:46
  • do you want disable product or out of stock product? 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
    Aug 21, 2020 at 9:53
  • My magento version Magento ver. 2.3.5-p1 @RohanHapani
    – Prits
    Aug 21, 2020 at 9:54
  • I want Disabled Product @DhirenVasoya
    – Prits
    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
    Aug 21, 2020 at 10:05
  • Did you get product collection? or have you disabled products in your product list? 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
    Aug 21, 2020 at 10:39
  • print_r($onlydisproduct->getData()); just do it. Aug 21, 2020 at 10:41
  • Did you get collection? @Prits 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
    Aug 21, 2020 at 10:08
  • Kindly check that you have some disable product into system. Aug 21, 2020 at 10:14
  • Yes i have disabled product in my system @Dhiren
    – Prits
    Aug 21, 2020 at 10:33
  • Then above code must work, have you check by caching and indexing commands. Aug 21, 2020 at 10:38
  • Flushed all cached and indexer done but still no success@Dhiren
    – Prits
    Aug 21, 2020 at 10:49

Your Answer

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

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