getBaseQuery(); $qb->select( 'wchg.`id_ws_customhtml_group`', 'wchg.`title`', 'wchg.`hook_name`', 'wchg.`custom_class`', 'wchg.`active`', 'wchg.`ordering`', 'wchg.`date_add`', '(SELECT COUNT(*) FROM `' . $this->dbPrefix . 'ws_customhtml` wch WHERE wch.`id_ws_customhtml_group` = wchg.`id_ws_customhtml_group`) AS blocks_count' ); $this->applyFilters($qb, $searchCriteria); $orderBy = $searchCriteria->getOrderBy() === 'position' ? 'wchg.ordering' : $searchCriteria->getOrderBy(); $qb ->orderBy($orderBy, $searchCriteria->getOrderWay()) ->setFirstResult($searchCriteria->getOffset() ?? 0) ->setMaxResults($searchCriteria->getLimit()); return $qb; } public function getCountQueryBuilder(SearchCriteriaInterface $searchCriteria) { $qb = $this->getBaseQuery(); $qb->select('COUNT(wchg.`id_ws_customhtml_group`)'); $this->applyFilters($qb, $searchCriteria); return $qb; } private function getBaseQuery() { return $this->connection ->createQueryBuilder() ->from($this->dbPrefix . 'ws_customhtml_group', 'wchg'); } private function applyFilters($qb, SearchCriteriaInterface $searchCriteria): void { foreach ($searchCriteria->getFilters() as $filterName => $filterValue) { if ($filterName === 'actions') { continue; } if ($filterName === 'id_ws_customhtml_group') { $qb->andWhere('wchg.`id_ws_customhtml_group` = :id_ws_customhtml_group') ->setParameter('id_ws_customhtml_group', (int) $filterValue); continue; } $qb->andWhere('wchg.`' . $filterName . '` LIKE :' . $filterName) ->setParameter($filterName, '%' . pSQL($filterValue) . '%'); } } }