/** * @param Event $event * @param Constraint $constraint */ public function validate($event, Constraint $constraint) { $eventEndDate = $event->getDate()->format('Y-m-d H:i:s'); $eventEndDate = new \DateTime($eventEndDate); $eventEndDate->modify("+" . $event->getDuration() . " minutes")->format('Y-m-d H:i:s'); // Map result set to my Entity. $rsm = new ResultSetMapping(); $rsm->addEntityResult('AppBundle\\Entity\\Event', 'e'); $rsm->addFieldResult('e', 'termin', 'date'); $rsm->addFieldResult('e', 'dauer', 'duration'); // Using MySQL for better DateTime handling $query = $this->em->createNativeQuery("SELECT * FROM veranstaltung e\n WHERE e.termin < :endDate\n AND e.termin + INTERVAL e.dauer MINUTE > :startDate", $rsm); $query->setParameters(array("endDate" => $eventEndDate, 'startDate' => $event->getDate()->format('Y-m-d H:i:s'))); $overlappingEntities = $query->getResult(); /** @var $constraint HasNoDateOverlap */ if ($overlappingEntities) { $this->context->addViolation($constraint->message); } }