* * @method Teamer|null find($id, $lockMode = null, $lockVersion = null) * @method Teamer|null findOneBy(array $criteria, array $orderBy = null) * @method Teamer[] findAll() * @method Teamer[] findBy(array $criteria, array $orderBy = null, $limit = null, $offset = null) */ class TeamerRepository extends ServiceEntityRepository { use QueryHelperTrait; public function __construct(ManagerRegistry $registry) { parent::__construct($registry, Teamer::class); } public function getListQuery(TeamerFilterDto $filterDto): Query { $qb = $this->createQueryBuilder('teamer'); $qb ->select('teamer', 'user') ->leftJoin('teamer.availabilities', 'availability') ->leftJoin('teamer.jobProfiles', 'job_profile') ->leftJoin('teamer.licenses', 'license') ->leftJoin('teamer.user', 'user') ; if (null !== $filterDto->getName()) { $qb ->andWhere($qb->expr()->like('teamer.lastName', ':name')) ->setParameter('name', '%'.$this->escapeLikeWildcards($filterDto->getName()).'%') ; } if (null !== $filterDto->getDateFrom()) { $qb ->andWhere($qb->expr()->gte('availability.dateFrom', ':dateFrom')) ->setParameter('dateFrom', $filterDto->getDateFrom()) ; } if (null !== $filterDto->getDateTo()) { $qb ->andWhere($qb->expr()->lte('availability.dateTo', ':dateTo')) ->setParameter('dateTo', $filterDto->getDateTo()) ; } if (null !== $filterDto->getJobProfile()) { $qb ->andWhere($qb->expr()->eq('job_profile', ':jobProfile')) ->setParameter('jobProfile', $filterDto->getJobProfile()) ; } if ('' !== $filterDto->getPickupId()) { $qb ->andWhere($qb->expr()->like('teamer.pickups', ':pickup')) ->setParameter('pickup', '%"'.$this->escapeLikeWildcards($filterDto->getPickupId()).'"%') ; } if (true === $filterDto->hasSkiLicense()) { $qb ->andWhere($qb->expr()->eq('license.type', ':licenseSki')) ->setParameter('licenseSki', License::TYPE_SKI) ; } if (true === $filterDto->hasSnowboardLicense()) { $qb ->andWhere($qb->expr()->eq('license.type', ':licenseSnowboard')) ->setParameter('licenseSnowboard', License::TYPE_SNOWBOARD) ; } return $qb->getQuery(); } }