'e.id:json_int', 'channel' => 'n.channel:json_string', 'sent_date' => 'n.sent_date:datetime_epoch', 'created' => 'n.created:datetime_epoch', 'is_sent' => 'n.is_sent:json_boolean', 'approved' => 'n.approved:json_boolean', ]; } /** * @return array */ protected function getOrderMappings() { return [ 'sent_date' => 'n.sent_date', 'created' => 'n.created', 'id' => 'n.id', ]; } /** * @param Summit $summit * @param PagingInfo $paging_info * @param Filter|null $filter * @param Order|null $order * @return PagingResponse */ public function getAllByPageBySummit(Summit $summit, PagingInfo $paging_info, Filter $filter = null, Order $order = null) { $query = $this->getEntityManager()->createQueryBuilder() ->select("n") ->from(SummitPushNotification::class, "n") ->leftJoin('n.summit_event', 'e') ->join('n.summit', 's', Join::WITH, " s.id = :summit_id") ->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->orderBy('n.id', Criteria::DESC); } $query = $query ->setFirstResult($paging_info->getOffset())->setMaxResults($paging_info->getPerPage()); $paginator = new Paginator($query, $fetchJoinCollection = true); $total = $paginator->count(); $data = array(); foreach ($paginator as $entity) array_push($data, $entity); return new PagingResponse ( $total, $paging_info->getPerPage(), $paging_info->getCurrentPage(), $paging_info->getLastPage($total), $data ); } /** * @return string */ protected function getBaseEntity() { return SummitPushNotification::class; } }