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?
2
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