Magento2: Коллекция для поиска по критериям


Как конвертировать

 $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 . '%'),
            )); 

Для получения того же результата с помощью SearchCriteria и ProductRepository?

Author: Miguel, 2017-06-22

1 answers

Я еще не тестирую, но это должно сработать

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();
}
 5
Author: mrtuvn, 2019-04-08 07:04:21