Magento2: Collection to SearchCriteria
-
10-10-2020 - |
Question
How to convert
$products = $this->_catalogSearchAdvanced
->getProductCollection()
->addStoreFilter($storeId)
->setCurPage($page)
->setPageSize($pageSize)
->setOrder($searchOrder, $searchDir)
->addAttributeToFilter(
array(
array('attribute' => 'name', 'like' => '%' . $searchTerm . '%'),
array('attribute' => 'description', 'like' => '%' . $searchTerm . '%'),
));
for get the same result using SearchCriteria and ProductRepository?
Solution
I'm not test yet but it should work
public function __construct(
ProductRepositoryInterface $productRepository,
SearchCriteriaBuilder $searchCriteriaBuilder,
FilterBuilder $filterBuilder,
\Magento\Framework\Api\SortOrderBuilder $sortOrderBuilder
) {
$this->productRepository = $productRepository;
$this->searchCriteriaBuilder = $searchCriteriaBuilder;
$this->filterBuilder = $filterBuilder;
$this->sortOrderBuilder = $sortOrderBuilder;
}
public function getProducts()
{
//use Magento\Framework\Api\SortOrder;
$filters[] = $this->filterBuilder->setField('search_term')
->setValue($searchTerm)
->create();
// Add another field filter
$filters[] = $this->filterBuilder->setField('another_field')
->setValue($value)
->create();
$this->searchCriteriaBuilder->addFilters($filters);
$sortOrder = $this->sortOrderBuilder->setField('field_name')->setDirection(SortOrder::SORT_ASC)->create();
$this->searchCriteriaBuilder->setSortOrders([$sortOrder]);
$searchCriteria = $this->searchCriteriaBuilder->setCurrentPage(1)->setPageSize(10)->create();
$searchResults = $this->productRepository->getList($searchCriteria);
return $searchResults->getItems();
}
Licensed under: CC-BY-SA with attribution
Not affiliated with magento.stackexchange