getTeamer(); if (true === $teamer->isAllowOverlappingApplications()) { return; } $assignment = $application->getAssignment(); $destination = $assignment->getDestination(); $applicationDateFrom = $destination->getDateFrom(); $applicationDateTo = $destination->getDateTo(); $qb = $this ->dispositionRepository ->createQueryBuilder('disposition') ; $conflictingCount = $qb ->select($qb->expr()->count('disposition')) ->innerJoin('disposition.assignment', 'assignment') ->innerJoin('assignment.destination', 'destination') ->where($qb->expr()->andX( $qb->expr()->eq('disposition.teamer', ':teamer'), $qb->expr()->isNull('assignment.deletedAt'), $qb->expr()->isNull('destination.deletedAt'), $qb->expr()->orX( $qb->expr()->andX( $qb->expr()->gt('destination.dateTo', ':application_date_from'), $qb->expr()->lt('destination.dateTo', ':application_date_to'), ), $qb->expr()->andX( $qb->expr()->lt('destination.dateFrom', ':application_date_to'), $qb->expr()->gt('destination.dateFrom', ':application_date_from'), ) ) )) ->setParameter('teamer', $teamer) ->setParameter('application_date_from', $applicationDateFrom) ->setParameter('application_date_to', $applicationDateTo) ->getQuery() ->getSingleScalarResult() ; if (0 < $conflictingCount) { $this ->context ->buildViolation($constraint->message) ->addViolation() ; } } }