Get Product Collection in Magento 2

Posted on

Use ResourceModel\Product\CollectionFactory if you need a collection by product.

<?php
declare(strict_types=1);
namespace Vendor\Module\Model;

use Magento\Catalog\Model\ResourceModel\Product\CollectionFactory as ProductCollectionFactory;

class YourClass
{
    protected $productCollection;

    public function __construct(
        ProductCollectionFactory $productCollection
    ) {
        $this->productCollection = $productCollection;
    }

    protected function getProductCollection()
    {
        $collection = $this->productCollection->create();

        foreach ($collection as $item) {
            // echo $item->getSku();
        }

        return $collection;
    }
}

Add attribute to select in collection:

// ...
$collection = $this->productCollection->create();
$collection->addAttributeToSelect('*');
// all or by attribute code:
$collection->addAttributeToSelect('name');
// ...

Add attribute to filter:

// ...
$productIds = ['00001', '00002'];

$collection = $this->productCollection->create();
$collection->addAttributeToFilter(
    'entity_id',
    ['in' => $productIds]
);
// ...

Add url rewrite:

// ...
$collection = $this->productCollection->create();
$collection->addUrlRewrite();
// ...

Tested in Magento 2.4.3