*/ final class EmployeeLeaveBalanceRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { parent::__construct($registry, EmployeeLeaveBalance::class); } public function findOneByEmployeeRuleAndYear( Employee $employee, LeaveRuleCode|string $ruleCode, int $year ): ?EmployeeLeaveBalance { $ruleCodeValue = $ruleCode instanceof LeaveRuleCode ? $ruleCode->value : $ruleCode; return $this->createQueryBuilder('b') ->andWhere('b.employee = :employee') ->andWhere('b.ruleCode = :ruleCode') ->andWhere('b.year = :year') ->setParameter('employee', $employee) ->setParameter('ruleCode', $ruleCodeValue) ->setParameter('year', $year) ->setMaxResults(1) ->getQuery() ->getOneOrNullResult() ; } public function findEarliestYearForEmployee(Employee $employee): ?int { $result = $this->createQueryBuilder('b') ->select('MIN(b.year) AS year') ->andWhere('b.employee = :employee') ->setParameter('employee', $employee) ->getQuery() ->getOneOrNullResult() ; if (!is_array($result) || !array_key_exists('year', $result) || null === $result['year']) { return null; } return (int) $result['year']; } }