Magento 2 – Fix Collection Get Items Returning Null

magento2product-collection

I tried to get all products sku, that started at $params['sku']
My controller:

<?php

namespace Aty\TestTask\Controller\Index;

use Magento\Framework\App\Action\Context;

class GetProductAjax extends \Magento\Framework\App\Action\Action
{
    /**
     * @var \Magento\Catalog\Model\Product
     */
    private $product;

    public function __construct(
        Context $context,
        \Magento\Catalog\Model\Product $product
    ) {
        $this->product = $product;
        parent::__construct($context);
    }

    public function execute()
    {
        $params = $this->getRequest()->getParams();

        if (!empty($params['sku'])) {
            $collection = $this->product->getCollection();
            $skus = $collection->addFieldToFilter('sku', array(
                'like' => $params['sku'].' %'
                ))
                ->getItems();
            return $skus;
        }
        return false;
    }
}

But it return null. Where is my fault?

Best Answer

try to use below code-

protected $_productCollectionFactory;

public function __construct(
    Context $context,
    \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory
) {
    $this->_productCollectionFactory = $productCollectionFactory; 
    parent::__construct($context);
}

public function execute()
{
    $params = $this->getRequest()->getParams();

    if (!empty($params['sku'])) {
        $collection =  $this->_productCollectionFactory->create();
        $collection = $collection->addFieldToFilter('sku', array(
            'like' => $params['sku'].' %'
            ));
        // if you want skus only
        $skus = array();
        foreach($collection as $product)
        {
          $skus[] = $product->getSku(); 
        }
        return $skus;
    }
    return false;
}