getFilterGroups() as $group) { $this->addFilterGroupToCollection($group, $collection); } if ($sortOrders = $searchCriteria->getSortOrders()) { $this->addOrderToCollection($sortOrders, $collection); } $collection->setCurPage($searchCriteria->getCurrentPage()); $collection->setPageSize($searchCriteria->getPageSize()); } /** * Helper function that adds a FilterGroup to the collection. * * @param FilterGroup $filterGroup * @param AbstractCollection $collection */ public function addFilterGroupToCollection(FilterGroup $filterGroup, AbstractCollection $collection): void { foreach ($filterGroup->getFilters() as $filter) { $condition = $filter->getConditionType() ?: 'eq'; $collection->addFieldToFilter($filter->getField(), [$condition => $filter->getValue()]); } } /** * Helper function that adds a SortOrder to the collection. * * @param SortOrder[] $sortOrders * @param AbstractCollection $collection */ public function addOrderToCollection($sortOrders, AbstractCollection $collection): void { /** @var SortOrder $sortOrder */ foreach ($sortOrders as $sortOrder) { $field = $sortOrder->getField(); $collection->addOrder( $field, ($sortOrder->getDirection() == SortOrder::SORT_DESC) ? 'DESC' : 'ASC' ); } } }