't.title:json_string', 'description' => 't.description:json_string', 'code' => 't.code:json_string', 'group_name' => new DoctrineFilterMapping ( "(g.name :operator :value)" ), ]; } /** * @return array */ protected function getOrderMappings() { return [ 'code' => 't.code', 'name' => 't.title', 'id' => 't.id', ]; } /** * @param Summit $summit * @param PagingInfo $paging_info * @param Filter|null $filter * @param Order|null $order * @return PagingResponse */ public function getBySummit ( Summit $summit, PagingInfo $paging_info, Filter $filter = null, Order $order = null ) { $query = $this->getEntityManager() ->createQueryBuilder() ->select("t") ->from(PresentationCategory::class, "t") ->leftJoin('t.groups', 'g') ->leftJoin('t.summit', 's') ->where("s.id = :summit_id"); $query->setParameter("summit_id", $summit->getId()); if(!is_null($filter)){ $filter->apply2Query($query, $this->getFilterMappings()); } if (!is_null($order)) { $order->apply2Query($query, $this->getOrderMappings()); } else { //default order $query = $query->addOrderBy("t.code",'ASC'); } $query = $query ->setFirstResult($paging_info->getOffset()) ->setMaxResults($paging_info->getPerPage()); $paginator = new Paginator($query, $fetchJoinCollection = true); $total = $paginator->count(); $data = []; foreach($paginator as $entity) $data[] = $entity; return new PagingResponse ( $total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $paging_info->getLastPage($total), $data ); } }