* * @method Availability|null find($id, $lockMode = null, $lockVersion = null) * @method Availability|null findOneBy(array $criteria, array $orderBy = null) * @method Availability[] findAll() * @method Availability[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class AvailabilityRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Availability::class); } public function getListQuery(): Query { $qb = $this->createQueryBuilder('availability'); return $qb ->where($qb->expr()->andX( $qb->expr()->gt('availability.dateFrom', ':today'), $qb->expr()->isNull('availability.owner') )) ->orderBy('availability.dateFrom', 'ASC') ->setParameter('today', new \DateTimeImmutable()) ->getQuery() ; } public function getSelectableForTeamer(Teamer $teamer): array { $qb = $this->createQueryBuilder('availability'); return $qb ->leftJoin('availability.teamers', 'teamer') ->where($qb->expr()->andX( $qb->expr()->gt('availability.dateFrom', ':today'), $qb->expr()->orX( $qb->expr()->isNull('teamer'), $qb->expr()->neq('teamer', ':teamer') ), $qb->expr()->orX( $qb->expr()->isNull('availability.owner'), $qb->expr()->eq('availability.owner', ':owner') ) )) ->orderBy('availability.dateFrom', 'ASC') ->setParameter('teamer', $teamer) ->setParameter('owner', $teamer) ->setParameter('today', new \DateTimeImmutable()) ->getQuery() ->getResult() ; } }