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 ?

Was it helpful?

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

Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange
scroll top