Magento 2 : How to get the best seller product collection?
-
16-04-2021 - |
Question
I'm trying to get Best Seller Product collection using below code, but it will not display any data
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productCollection = $objectManager->create('\Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory');
$collection = $productCollection->create()->setModel('Magento\Catalog\Model\Product')->setPeriod('yearly');
How to get Best Seller Product collection ?
Solution
Please try this code to get best seller product collections using objectManager.
$objectManager = \Magento\Framework\App\ObjectManager::getInstance();
$productCollection = $objectManager->create('Magento\Reports\Model\ResourceModel\Report\Collection\Factory');
$collection = $productCollection->create('Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection');
$collection->setPeriod('year');
//$collection->setPeriod('month');
//$collection->setPeriod('day');
foreach ($collection as $item) {
print_r($item->getData());
}
OTHER TIPS
But if you want latest bestselling product collection for the day please use this code in block
public function getBestsellerProduct(){
$resourceCollection = $this->_resourceFactory->create('Magento\Sales\Model\ResourceModel\Report\Bestsellers\Collection');
$resourceCollection->setPageSize(6);
$resourceCollection->setPeriod('day')->addStoreFilter(1)->getSelect()->order('period DESC');
return $resourceCollection;
}
To get best seller collection, try to do as follows:
Step 1: Firstly, Create one block file on our custom extension
add Blockname.php in the following path
<?php
namespace Vendor\Extension\Block;
use Magento\Catalog\Block\Product\Context;
use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory;
use Magento\Sales\Model\ResourceModel\Report\Bestsellers\CollectionFactory as BestSellersCollectionFactory;
use Magento\Framework\View\Element\Template;
use Magento\Store\Model\StoreManagerInterface;
class Blockname extends Template
{
protected $_bestSellersCollectionFactory;
protected $_productCollectionFactory;
protected $_storeManager;
public function __construct(
Context $context,
CollectionFactory $productCollectionFactory,
StoreManagerInterface $storeManager,
BestSellersCollectionFactory $bestSellersCollectionFactory,
) {
$this->_bestSellersCollectionFactory = $bestSellersCollectionFactory;
$this->_storeManager = $storeManager;
$this->_productCollectionFactory $productCollectionFactory;
parent::__construct($context);
}
public function getProductCollection()
{
$productIds = [];
$bestSellers = $this->_bestSellersCollectionFactory->create()
->setPeriod('month');
foreach ($bestSellers as $product) {
$productIds[] = $product->getProductId();
}
$collection = $this->_productCollectionFactory->create()->addIdFilter($productIds);
$collection->addMinimalPrice()
->addFinalPrice()
->addTaxPercents()
->addAttributeToSelect('*')
->addStoreFilter($this->getStoreId())
->setPageSize(count($productIds));
return $collection;
}
public function getStoreId(){
return $this->_storeManager->getStore()->getId();
}
}
Step 2: After the above step Insert the below code in phtml file at the following path.
app\code\Vendor\Extension\view\frontend\templates\list.phtml.
<?php
$collection = $block->getProductCollection();
foreach ($collection as $_product)
{
echo $product->getName() . ' - ' . $product->getProductUrl() . '<br />';
}
Step 3: Flush Cache and view the result.
https://github.com/viveksh2021/Bestseller please follow custom module for bestseller product collection on daily basis