*/ class UserRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, User::class); } /** * @return User[] */ public function findByRole(string $role): array { $conn = $this->getEntityManager()->getConnection(); $sql = 'SELECT id FROM "user" WHERE roles::text LIKE :role'; $ids = $conn->executeQuery($sql, ['role' => '%"'.$role.'"%'])->fetchFirstColumn(); if ([] === $ids) { return []; } return $this->createQueryBuilder('u') ->where('u.id IN (:ids)') ->setParameter('ids', $ids) ->getQuery() ->getResult() ; } /** * Employees active on the given date (hired on/before it, not yet left). * * @return User[] */ public function findActiveEmployees(DateTimeInterface $date): array { $dateStr = $date->format('Y-m-d'); return $this->createQueryBuilder('u') ->where('u.isEmployee = true') ->andWhere('u.hireDate IS NULL OR u.hireDate <= :date') ->andWhere('u.endDate IS NULL OR u.endDate >= :date') ->setParameter('date', $dateStr) ->orderBy('u.username', 'ASC') ->getQuery() ->getResult() ; } }