getDoctrine()->getManager(); $sql = 'SELECT c FROM ChillCalendarBundle:CalendarRange c WHERE NOT EXISTS (SELECT cal.id FROM ChillCalendarBundle:Calendar cal WHERE cal.calendarRange = c.id)'; if ($request->query->has('user')) { $user = $request->query->get('user'); $sql = $sql . ' AND c.user = :user'; $query = $em->createQuery($sql) ->setParameter('user', $user); if ($request->query->has('start') && $request->query->has('end')) { $startDate = $request->query->get('start'); $endDate = $request->query->get('end'); $sql = $sql . ' AND c.startDate > :startDate AND c.endDate < :endDate'; $query = $em ->createQuery($sql) ->setParameter('startDate', $startDate) ->setParameter('endDate', $endDate) ->setParameter('user', $user); } if($request->query->has('start') && !$request->query->has('end')) { $startDate = $request->query->get('start'); $sql = $sql . ' AND c.startDate > :startDate + INTERVAL "1 DAY"'; dump($sql); $query = $em ->createQuery($sql) ->setParameter('startDate', $startDate) ->setParameter('user', $user); } } else { $query = $em->createQuery($sql); } $results = $query->getResult(); return $this->json(['count' => count($results), 'results' => $results], Response::HTTP_OK, [], ['groups' => ['read']]); //TODO use also the paginator, eg return $this->serializeCollection('get', $request, $_format, $paginator, $results); } }