Получите случайные товары из категории в magento 2
У меня есть класс, который возвращает 3 продукта из категории, эти продукты упорядочены по идентификатору сущности и всегда возвращают одни и те же 3 продукта из категории X. Я хочу рандомизировать их. в magento 1 вы могли бы сделать что-то вроде $collection->getSelect()->order('RAND()');
, но это больше не работает в magento 2.
Это код, который получает 3 продукта из категории X.
protected $categoryFactory;
public function __construct(
\Magento\Catalog\Model\CategoryFactory $categoryFactory
)
{
$this->categoryFactory = $categoryFactory;
}
public function getCategory($id)
{
$category = $this->categoryFactory->create()->load($id);
return $category;
}
public function getProductsCollection($id)
{
$r = array();
$products = $this
->getCategory($id)
->getProductCollection()
->addAttributeToSelect('*')
->setPageSize(3)
->getItems();
foreach ($products as $product) {
$r[] = $product->getData();
}
return $r;
}
2 answers
Я предлагаю вам использовать метод orderRand()
.
Вы можете сделать:
$productsCol = $this
->getCategory($id)
->getProductCollection()
->addAttributeToSelect('*')
->setPageSize(3);
$productsCol->getSelect()->orderRand();
$products = $productsCol->getItems();
В вашем коде есть проблема:
$collection->getSelect()->order('RAND()');
Вы вызвали php RAND() внутри кавычки ('RAND()'), которая недопустима.
Удалить цитату для RAND()
Сам ваш код должен работать, также укажите РАНД минимальной и максимальной длины ($min, $max)
Но все же я бы рекомендовал вам пойти по пути Magento (так же, как ответил Рафаэль)