Получите случайные товары из категории в 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;
}
Author: Raphael at Digital Pianism, 2016-04-28

2 answers

Я предлагаю вам использовать метод orderRand().

Вы можете сделать:

$productsCol = $this
        ->getCategory($id)
        ->getProductCollection()
        ->addAttributeToSelect('*')
        ->setPageSize(3);

$productsCol->getSelect()->orderRand();

$products = $productsCol->getItems();
 20
Author: Raphael at Digital Pianism, 2016-04-28 09:06:52

В вашем коде есть проблема: $collection->getSelect()->order('RAND()');

Вы вызвали php RAND() внутри кавычки ('RAND()'), которая недопустима.

Удалить цитату для RAND()

Сам ваш код должен работать, также укажите РАНД минимальной и максимальной длины ($min, $max)

Но все же я бы рекомендовал вам пойти по пути Magento (так же, как ответил Рафаэль)

 0
Author: Mohammad Mujassam, 2016-04-28 11:43:52