【问题标题】:Magento 2 get product collection by price rangeMagento 2 按价格范围获取产品集合
【发布时间】:2018-02-15 09:58:48
【问题描述】:

如何在 Magento 2 中根据价格范围创建产品集合。 这是我到目前为止所拥有的:

<?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');
    }
}
?>

但是,代码不会返回包含价格范围的结果。结果完全为空,但应该返回一些产品,我该如何过滤价格范围?

谢谢,

【问题讨论】:

    标签: collections magento2


    【解决方案1】:

    范围过滤器,对我来说,使用 addFieldToFilter 以这种方式工作。你试过了吗?

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

    【讨论】:

    • ->addFieldToFilter('special_price', ['from' => 0, 'to' => 1000]) 不起作用。
    • 这很奇怪,我尝试了一些产品,它对我有用,价格正常,就像这样$products = $this-&gt;_productCollectionFactory-&gt;create() -&gt;addAttributeToSelect('*') -&gt;addFieldToFilter( 'price' , array('from' =&gt; 0, 'to' =&gt; 5) ) -&gt;setPageSize(5);
    • 你是对的,状态和可见性过滤器阻止了显示范围。
    • 你知道为什么吗?
    • 其实没有,我还没有尝试过这些类型的过滤器,只是发现了这个问题magento.stackexchange.com/questions/80179/…,我想到它们可能没有很好地初始化。我无法将它们的声明视为类属性...您检查过返回值吗?
    猜你喜欢
    • 2016-05-21
    • 1970-01-01
    • 2011-06-26
    • 1970-01-01
    • 2013-04-20
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多