shopContext = $shopContext; $this->contextLangId = $contextLangId; } /** * @param SearchCriteriaInterface $searchCriteria * * @return QueryBuilder */ public function getSearchQueryBuilder(SearchCriteriaInterface $searchCriteria): QueryBuilder { $qb = $this->getBaseQuery($searchCriteria->getFilters()); $qb->select('islide.id_slide, islidel.title, islidel.description, islidel.image, islide.active, islide.position') ->join('islide', $this->dbPrefix . 'image_slider_lang', 'islidel', 'islidel.id_slide = islide.id_slide') ->where('islidel.id_lang = :langId') ->setParameter('langId', (int) $this->contextLangId); if (!$this->shopContext->isAllShopContext()) { $qb->join('islide', $this->dbPrefix . 'image_slider_shop', 'islides', 'islides.id_slide = islide.id_slide') ->where('islides.id_shop in (' . implode(', ', $this->shopContext->getContextListShopID()) . ')') ->groupBy('islide.id_slide'); } $qb->orderBy( $searchCriteria->getOrderBy(), $searchCriteria->getOrderWay() ) ->setFirstResult($searchCriteria->getOffset() ?? 0) ->setMaxResults($searchCriteria->getLimit() ?? 10); $qb->orderBy('position'); return $qb; } /** * @param SearchCriteriaInterface $searchCriteria * * @return QueryBuilder */ public function getCountQueryBuilder(SearchCriteriaInterface $searchCriteria): QueryBuilder { $qb = $this->getBaseQuery(); $qb->select('COUNT(DISTINCT islide.id_slide)'); if (!$this->shopContext->isAllShopContext()) { $qb->join('islide', $this->dbPrefix . 'image_slider_shop', 'islides', 'islides.id_slide = islide.id_slide') ->where('islides.id_shop in (' . implode(', ', $this->shopContext->getContextListShopID()) . ')'); } return $qb; } /** * @return QueryBuilder */ private function getBaseQuery(): QueryBuilder { return $this->connection ->createQueryBuilder() ->from($this->dbPrefix . 'image_slider', 'islide'); } }