From cb578248616019a8e109ae56d09d800739b5f9d8 Mon Sep 17 00:00:00 2001 From: thibaud-leclere Date: Thu, 15 Jan 2026 20:35:39 +0100 Subject: [PATCH] Add actors and their roles --- src/Entity/Actor.php | 93 ++++++++++++++++++++++++++ src/Entity/Movie.php | 43 ++++++++++++ src/Entity/MovieRole.php | 65 ++++++++++++++++++ src/Repository/ActorRepository.php | 43 ++++++++++++ src/Repository/MovieRoleRepository.php | 43 ++++++++++++ 5 files changed, 287 insertions(+) create mode 100644 src/Entity/Actor.php create mode 100644 src/Entity/MovieRole.php create mode 100644 src/Repository/ActorRepository.php create mode 100644 src/Repository/MovieRoleRepository.php diff --git a/src/Entity/Actor.php b/src/Entity/Actor.php new file mode 100644 index 0000000..e2feca5 --- /dev/null +++ b/src/Entity/Actor.php @@ -0,0 +1,93 @@ + + */ + #[ORM\OneToMany(targetEntity: MovieRole::class, mappedBy: 'actor')] + private Collection $movieRoles; + + public function __construct() + { + $this->movieRoles = new ArrayCollection(); + } + + public function getId(): ?int + { + return $this->id; + } + + public function getName(): string + { + return $this->name; + } + + public function setName(string $name): static + { + $this->name = $name; + + return $this; + } + + public function getPopularity(): ?float + { + return $this->popularity; + } + + public function setPopularity(?float $popularity): static + { + $this->popularity = $popularity; + + return $this; + } + + /** + * @return Collection + */ + public function getMovieRoles(): Collection + { + return $this->movieRoles; + } + + public function addMovieRole(MovieRole $movieRole): static + { + if (!$this->movieRoles->contains($movieRole)) { + $this->movieRoles->add($movieRole); + $movieRole->setActor($this); + } + + return $this; + } + + public function removeMovieRole(MovieRole $movieRole): static + { + if ($this->movieRoles->removeElement($movieRole)) { + // set the owning side to null (unless already changed) + if ($movieRole->getActor() === $this) { + $movieRole->setActor(null); + } + } + + return $this; + } +} diff --git a/src/Entity/Movie.php b/src/Entity/Movie.php index 4853b18..7d00b6d 100644 --- a/src/Entity/Movie.php +++ b/src/Entity/Movie.php @@ -3,6 +3,8 @@ namespace App\Entity; use App\Repository\MovieRepository; +use Doctrine\Common\Collections\ArrayCollection; +use Doctrine\Common\Collections\Collection; use Doctrine\ORM\Mapping as ORM; #[ORM\Entity(repositoryClass: MovieRepository::class)] @@ -22,6 +24,17 @@ class Movie #[ORM\Column(length: 255)] private ?string $title = null; + /** + * @var Collection + */ + #[ORM\OneToMany(targetEntity: MovieRole::class, mappedBy: 'movie')] + private Collection $actors; + + public function __construct() + { + $this->actors = new ArrayCollection(); + } + public function getId(): ?int { return $this->id; @@ -62,4 +75,34 @@ class Movie return $this; } + + /** + * @return Collection + */ + public function getActors(): Collection + { + return $this->actors; + } + + public function addActor(MovieRole $actor): static + { + if (!$this->actors->contains($actor)) { + $this->actors->add($actor); + $actor->setMovie($this); + } + + return $this; + } + + public function removeActor(MovieRole $actor): static + { + if ($this->actors->removeElement($actor)) { + // set the owning side to null (unless already changed) + if ($actor->getMovie() === $this) { + $actor->setMovie(null); + } + } + + return $this; + } } diff --git a/src/Entity/MovieRole.php b/src/Entity/MovieRole.php new file mode 100644 index 0000000..ecd4baf --- /dev/null +++ b/src/Entity/MovieRole.php @@ -0,0 +1,65 @@ +id; + } + + public function getCharacter(): ?string + { + return $this->character; + } + + public function setCharacter(string $character): static + { + $this->character = $character; + + return $this; + } + + public function getActor(): ?Actor + { + return $this->actor; + } + + public function setActor(?Actor $actor): static + { + $this->actor = $actor; + + return $this; + } + + public function getMovie(): ?Movie + { + return $this->movie; + } + + public function setMovie(?Movie $movie): static + { + $this->movie = $movie; + + return $this; + } +} diff --git a/src/Repository/ActorRepository.php b/src/Repository/ActorRepository.php new file mode 100644 index 0000000..d4de24b --- /dev/null +++ b/src/Repository/ActorRepository.php @@ -0,0 +1,43 @@ + + */ +class ActorRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + parent::__construct($registry, Actor::class); + } + + // /** + // * @return Actor[] Returns an array of Actor objects + // */ + // public function findByExampleField($value): array + // { + // return $this->createQueryBuilder('a') + // ->andWhere('a.exampleField = :val') + // ->setParameter('val', $value) + // ->orderBy('a.id', 'ASC') + // ->setMaxResults(10) + // ->getQuery() + // ->getResult() + // ; + // } + + // public function findOneBySomeField($value): ?Actor + // { + // return $this->createQueryBuilder('a') + // ->andWhere('a.exampleField = :val') + // ->setParameter('val', $value) + // ->getQuery() + // ->getOneOrNullResult() + // ; + // } +} diff --git a/src/Repository/MovieRoleRepository.php b/src/Repository/MovieRoleRepository.php new file mode 100644 index 0000000..aa7d755 --- /dev/null +++ b/src/Repository/MovieRoleRepository.php @@ -0,0 +1,43 @@ + + */ +class MovieRoleRepository extends ServiceEntityRepository +{ + public function __construct(ManagerRegistry $registry) + { + 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() +// ; +// } + +// public function findOneBySomeField($value): ?MovieRole +// { +// return $this->createQueryBuilder('m') +// ->andWhere('m.exampleField = :val') +// ->setParameter('val', $value) +// ->getQuery() +// ->getOneOrNullResult() +// ; +// } +}