From 7f3738007d0a568a16582ee6aa57ae95205d6376 Mon Sep 17 00:00:00 2001 From: thibaud-leclere Date: Mon, 30 Mar 2026 22:31:07 +0200 Subject: [PATCH] feat: add findOneRandomByActor to MovieRoleRepository --- src/Repository/MovieRoleRepository.php | 43 ++++++++++++-------------- 1 file changed, 20 insertions(+), 23 deletions(-) diff --git a/src/Repository/MovieRoleRepository.php b/src/Repository/MovieRoleRepository.php index aa7d755..f856b77 100644 --- a/src/Repository/MovieRoleRepository.php +++ b/src/Repository/MovieRoleRepository.php @@ -16,28 +16,25 @@ class MovieRoleRepository extends ServiceEntityRepository parent::__construct($registry, MovieRole::class); } -// /** -// * @return MovieRole[] Returns an array of MovieRole objects -// */ -// public function findByExampleField($value): array -// { -// return $this->createQueryBuilder('m') -// ->andWhere('m.exampleField = :val') -// ->setParameter('val', $value) -// ->orderBy('m.id', 'ASC') -// ->setMaxResults(10) -// ->getQuery() -// ->getResult() -// ; -// } + /** + * @param list $excludeMovieRoleIds MovieRole IDs to exclude + * @return MovieRole|null + */ + public function findOneRandomByActor(int $actorId, array $excludeMovieRoleIds = []): ?MovieRole + { + $qb = $this->createQueryBuilder('mr') + ->andWhere('mr.actor = :actorId') + ->setParameter('actorId', $actorId); -// public function findOneBySomeField($value): ?MovieRole -// { -// return $this->createQueryBuilder('m') -// ->andWhere('m.exampleField = :val') -// ->setParameter('val', $value) -// ->getQuery() -// ->getOneOrNullResult() -// ; -// } + if (!empty($excludeMovieRoleIds)) { + $qb->andWhere('mr.id NOT IN (:excludeIds)') + ->setParameter('excludeIds', $excludeMovieRoleIds); + } + + return $qb + ->orderBy('RANDOM()') + ->setMaxResults(1) + ->getQuery() + ->getOneOrNullResult(); + } }