How to Get Category Collection in Magento 2?

In this blog, I am going to show you how to get the list of all categories in Magento 2 programmatically.

In the below example, I will be using both Dependency Injection (DI) and Object Manager to get the category collection in Magento 2.

Using Dependency Injection (DI)

Here is the example code to get the list of all categories in Magento 2 using dependency injection.

In this, we might need to inject the object of \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory and \Magento\Catalog\Helper\Category classes in the constructor of our module’s block class and access it from the view ( .phtml ) file.

Sample File Path: app/code/YourCompanyName/YourModuleName/Block/YourCustomBlock.php

<?php
namespace YourCompanyName\YourModuleName\Block;
class YourCustomBlock extends \Magento\Framework\View\Element\Template
{ 
    protected $_categoryCollectionFactory;

    protected $_categoryHelper;
 
    public function __construct(
        \Magento\Framework\View\Element\Template\Context $context,
        \Magento\Catalog\Model\ResourceModel\Category\CollectionFactory $categoryCollectionFactory,
        \Magento\Catalog\Helper\Category $categoryHelper,
        array $data = []
    ) {
        $this->_categoryCollectionFactory = $categoryCollectionFactory;
        $this->_categoryHelper = $categoryHelper;
        parent::__construct($context, $data);
    }
 
    public function getCategoryCollection($isActive = true, $level = false, $sortBy = false, $pageSize = false) {
        $collection = $this->_categoryCollectionFactory->create();
        $collection->addAttributeToSelect('*');
 
        // select only active categories
        if ($isActive) {
            $collection->addIsActiveFilter();
        }
 
        // select categories of certain level
        if ($level) {
            $collection->addLevelFilter($level);
        }
 
        // sort categories by some value
        if ($sortBy) {
            $collection->addOrderField($sortBy);
        }
 
        // set pagination
        if ($pageSize) {
            $collection->setPageSize($pageSize); 
        } 
 
        return $collection;
    }
 
    public function getStoreCategories($sorted = false, $asCollection = false, $toLoad = true) {
        return $this->_categoryHelper->getStoreCategories($sorted = false, $asCollection = false, $toLoad = true);
    }
}

Now, we can use the functions in our view (.phtml) file as follows.

// get the list of all categories
$categories = $block->getCategoryCollection(); 
foreach ($categories as $category) {
    echo $category->getId() . '<br />';
    echo $category->getName() . '<br />';
}
 
// get categories sorted by category name
$categories = $block->getCategoryCollection(true, false, 'name', false);
foreach ($categories as $category) { 
    echo $category->getId() . '<br />';
    echo $category->getName() . '<br />';
}
 
// get current store’s categories
$categories = $block->getStoreCategories();
foreach ($categories as $category) { 
    echo $category->getId() . '<br />';
    echo $category->getName() . '<br />';
}

Using Object Manager

Here is the code to get the list of all categories in Magento 2 using Object Manager.

$objectManager = \Magento\Framework\App\ObjectManager::getInstance();

// get the list of all categories
$categoryCollection = $objectManager->get('\Magento\Catalog\Model\ResourceModel\Category\CollectionFactory');
$categories = $categoryCollection->create();
$categories->addAttributeToSelect('*');
 
foreach ($categories as $category) {
    echo $category->getId() . '<br />';
    echo $category->getName() . '<br />';
    echo $category->getUrl() . '<br />';
}

// get current store’s categories 
$categoryHelper = $objectManager->get('\Magento\Catalog\Helper\Category');
$categories = $categoryHelper->getStoreCategories();
 
foreach ($categories as $category) {
    echo $category->getId() . '<br />';
    echo $category->getName() . '<br />';
}

Read: How to Get Product Collection in Magento 2?

Hope this helps.

Leave a Reply

Your email address will not be published. Required fields are marked *