To retrieve a list of product SKUs in random order using Magento 2's ProductRepository and SearchCriteriaBuilder, you can modify your code to include a random sort order. Here's how you can achieve this:
use Magento\Framework\Api\SearchCriteriaBuilder;
use Magento\Catalog\Api\ProductRepositoryInterface;
use Magento\Framework\Api\SortOrder;
use Magento\Framework\ObjectManager\ConfigLoaderInterface;
class YourClass
{
/**
* @var ProductRepositoryInterface
*/
protected $productRepository;
/**
* @var SearchCriteriaBuilder
*/
protected $searchCriteriaBuilder;
/**
* @var ConfigLoaderInterface
*/
protected $configLoader;
public function __construct(
ProductRepositoryInterface $productRepository,
SearchCriteriaBuilder $searchCriteriaBuilder,
ConfigLoaderInterface $configLoader
) {
$this->productRepository = $productRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->configLoader = $configLoader;
}
public function getRandomProductSkus()
{
// Create a random sort order
$sortOrder = new SortOrder();
$sortOrder->setField('rand'); // 'rand' is not a native Magento field; you'll need to create a custom attribute for random sorting.
// Set the random sort order in the search criteria
$this->searchCriteriaBuilder->addSortOrder($sortOrder);
// Build the search criteria
$searchCriteria = $this->searchCriteriaBuilder->create();
// Get the list of products
$productList = $this->productRepository->getList($searchCriteria);
// Extract SKUs from the products
$skus = [];
foreach ($productList->getItems() as $product) {
$skus[] = $product->getSku();
}
return $skus;
}
}