getEntityManager()->createQueryBuilder() ->select("n") ->from(\models\summit\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, array ( 'event_id' => '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_int', )); } if (!is_null($order)) { $order->apply2Query($query, array ( 'sent_date' => 'n.sent_date', 'created' => 'n.created', 'id' => 'n.id', )); } 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 ); } }