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(); + } }