How to Shuffle Product Collection in Magento 2?
-
26-01-2021 - |
Question
I am getting products collection form multiple categories. I want to shuffle products everytime when function getProductCollection() is called. My function is:
public function getProductCollection($categories)
{
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addCategoriesFilter(['in' => $categories]);
$collection->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH);
$collection->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
$collection->setPageSize(5);
return $collection;
}
Solution
Try this:
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addCategoriesFilter(['in' => $categories]);
$collection->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH);
$collection->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
$collection->setPageSize(5);
$collection ->getSelect()->orderRand();
//or use this line $collection->getSelect()->order('RAND()');
return $collection;
OTHER TIPS
Try this:
$collection = $this->_productCollectionFactory->create();
$collection->addAttributeToSelect('*');
$collection->addCategoriesFilter(['in' => $categories]);
$collection->addAttributeToFilter('visibility', \Magento\Catalog\Model\Product\Visibility::VISIBILITY_BOTH);
$collection->addAttributeToFilter('status',\Magento\Catalog\Model\Product\Attribute\Source\Status::STATUS_ENABLED);
$collection->setPageSize(5);
$collection ->getSelect()->orderRand();
return $collection;
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange