...  6   7   8   9   10   11   12   13  ...

Propel. Porady

10. Porada #10: Relacja n:m, metody getXHasYsJoinX(), getXHasYsJoinY()

Obiekty stojące w relacji n:m również mają metody dostępu do skorelowanych danych. Metody te nazywają się zgodnie ze schematem

getZsJoinX() (w klasie X)
getZsJoinY() (w klasie Y)

gdzie Z jest nazwą tabeli haszującej, a X oraz Y — nazwami tabel połączonych relacją.

Jeśli tabele film oraz aktor połączymy relacją n:m i tabelę haszującą nazwiemy film_has_aktor, to Propel wygeneruje trzy klasy: Film, Aktor oraz FilmHasAktor. W klasie Film znajdziemy metodę getFilmHasAktorsJoinAktor(), a w klasie Aktor — metodę getFilmHasAktorsJoinFilm(). Metody te będą zwracały obiekty tabeli film_has_aktor.

Oto skrypt drukujący tytuły wszystkich filmów, w których wystąpił aktor o identyfikatorze 1:

$aktor = AktorPeer::retrieveByPK(1);
$c = new Criteria();
$objs = $aktor->getFilmHasAktorsJoinFilm($c);
foreach ($objs as $obj) {
  echo $obj->getFilm()->getTytul();
}

oraz skrypt, który drukuje nazwiska wszystkich aktorów grających w filmie o identyfikatorze 7:

$film = FilmPeer::retrieveByPK(7);
$c = new Criteria();
$objs = $film->getFilmHasAktorsJoinAktor($c);
foreach ($objs as $obj) {
  echo $obj->getAktor()->getNazwisko();
}

Korzystając z powyższych metod możemy opracować własne metody, których wyniki, będą obiektami klas Film lub Aktor. Przykładem takiej metody jest getFilmsByAktor() (nowa metoda, ręcznie dodana w klasie Aktor), której użycie upraszcza kod skryptu:

$aktor = AktorPeer::retrieveByPK(1);
$c = new Criteria;
$filmy = $aktor->getFilmsByAktor($c);
foreach ($filmy as $film) {
  ...
}
...  6   7   8   9   10   11   12   13  ...