user1054080
user1054080

Reputation:

Magento 2 get product collection by price range

How can I create a production collection based on pricerange in Magento 2. This is what i have so far:

<?php namespace Qxs\Related\Block;

class Related extends \Magento\Framework\View\Element\Template
{
    protected $_productCollectionFactory;

    public function __construct(
        \Magento\Backend\Block\Template\Context $context,
        \Magento\Catalog\Model\ResourceModel\Product\CollectionFactory $productCollectionFactory,
        \Magento\Catalog\Model\Product\Attribute\Source\Status $productStatus,
        \Magento\Catalog\Model\Product\Visibility $productVisibility,
        array $data = []
    )
    {
        $this->_productCollectionFactory = $productCollectionFactory;
        $this->productStatus = $productStatus;
        $this->productVisibility = $productVisibility;
        parent::__construct($context, $data);
    }

    public function getProductCollection()
    {
      //var_dump($this->currentProduct());
        $collection = $this->_productCollectionFactory->create();
        $collection->addAttributeToSelect('*')
          ->addAttributeToFilter('special_price', ['from' => 0, 'to' => 1000])
          ->addAttributeToFilter('status', ['in' => $this->productStatus->getVisibleStatusIds()])
          ->setVisibility($this->productVisibility->getVisibleInSiteIds())
          ->setPageSize(5);

        return $collection;
    }

    public function currentProduct()
    {
      return $this->_coreRegistry->registry('product');
    }
}
?>

However, the code does not return a result including a price range. The result is totally empty but should return some products, how can I filter on price-range?

Thanks,

Upvotes: 0

Views: 4830

Answers (1)

sissy
sissy

Reputation: 2998

Range filters, to me work in this way, with addFieldToFilter. Have you tried it?

$orders = $this->_orderCollectionFactory->create()
            ->addAttributeToSelect('*')
            ->addFieldToFilter( 'created_at' , array('from' => $dateFrom, 'to' => $dateTo) )
            ->setOrder('created_at', 'desc' );
            ->setPageSize(200);

Upvotes: 1

Related Questions