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