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?

Was it helpful?

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
scroll top