diff --git a/src/Repository/EmployeeRttPaymentRepository.php b/src/Repository/EmployeeRttPaymentRepository.php index e5ed8c2..60084a2 100644 --- a/src/Repository/EmployeeRttPaymentRepository.php +++ b/src/Repository/EmployeeRttPaymentRepository.php @@ -12,7 +12,7 @@ use Doctrine\Persistence\ManagerRegistry; /** * @extends ServiceEntityRepository */ -final class EmployeeRttPaymentRepository extends ServiceEntityRepository +class EmployeeRttPaymentRepository extends ServiceEntityRepository { public function __construct(ManagerRegistry $registry) { @@ -60,4 +60,31 @@ final class EmployeeRttPaymentRepository extends ServiceEntityRepository ->getResult() ; } + + /** + * Paiements de plusieurs employés sur plusieurs exercices (fetch groupé, + * évite le N+1 sur l'export PDF). Jointure employé chargée. + * + * @param list $employees + * @param list $years années d'exercice + * + * @return EmployeeRttPayment[] + */ + public function findByEmployeesAndYears(array $employees, array $years): array + { + if ([] === $employees || [] === $years) { + return []; + } + + return $this->createQueryBuilder('p') + ->andWhere('p.employee IN (:employees)') + ->andWhere('p.year IN (:years)') + ->setParameter('employees', $employees) + ->setParameter('years', $years) + ->innerJoin('p.employee', 'e') + ->addSelect('e') + ->getQuery() + ->getResult() + ; + } }