Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] ORM
Forum PHP.pl > Forum > PHP > Frameworki
barthpl
Witam mam takie pytanie czy istnieje możliwość wykorzystania ORM i opcji has_many w wypadku gdy chce połączyć obiekt typu A (zapisany w tabeli A z kluczem idA) z wieloma obiektami typu B (zapisany w tabeli B z kluczem idB) korzystając z tabeli AB (posiada dwa pola, klucze zewnętrzne: idA i idB). Jeżeli tak to prosił bym o schematyczny przykład takiego zastosowania.

--- edycja --

oki znalazłem rozwiązanie na http://docs.kohanaphp.com/libraries/orm/starting
laohost
Jeżeli chcesz użyć A has_many B to B musi posiadać pole A_id. Jeśli chcesz użyć koniecznie dodatkowej tabeli - w grę wchodzi tylko opcja has_and_belongs_to_many. Kohana jednak nie będzie wtedy sprawdzać, czy jeden rekord B należy do jednego rekordu A, czy do większej ilości (i na odwrót, czy A należy do cool.gif - nie jest to chyba więc najlepsze rozwiązanie.

Nic nie stoi na przeszkodzie (chyba, bo nie próbowałem tak), aby zarówno A jak i B miały siebie nawzajem w has_many. Wówczas obydwie muszą mieć pole X_id.
barthpl
Cytat(laohost @ 14.09.2009, 18:55:54 ) *
Kohana jednak nie będzie wtedy sprawdzać, czy jeden rekord B należy do jednego rekordu A, czy do większej ilości (i na odwrót, czy A należy do cool.gif
Zupełnie mi to nie przeszkadza więc skorzystałem ze wspomnianego has_and_belongs_to_many

Jednak problemu wcale sobie nie rozwiązałem. Pozwolę sobie na nieco szerszy opis problemu.

Wspomniana tabela A niech będzie tabelą definiującą kontener natomiast tabela B definiuje boksy które można układać do kontenera. Tabela łącząca zgodnie z opisem w dokumentacji (http://docs.kohanaphp.com/libraries/orm/starting) nazywa się A_B i zawiera trzy pola: A_id, B_id oraz orderId.

Klasy zdefiniowane wyglądają następująco:
  1. class A_Model extends ORM
  2. {
  3. protected $primary_key = 'id';
  4. protected $table_name = 'A';
  5.  
  6. protected $has_and_belongs_to_many = array( 'Bs' );
  7. }

oraz
  1. class B_Model extends ORM
  2. {
  3. protected $primary_key = 'id';
  4. protected $table_name = 'B';
  5.  
  6. protected $has_and_belongs_to_many = array( 'As' );
  7. }

i wszystkie boxy przypisane do danego kontenera wyświetlam w następujący sposób
  1. $page = new A_Model( $pageId );
  2. foreach( $page->As as $box )
  3. echo '<li>'.$box->name.'</li>';

i tu pojawia się moje pytanie jak to zmodyfikować aby kolejność elementów wyświetlanych uwzględniała pole orderId z tabeli A_B.
phpion
Miałem ten sam problem. Rozwiązanie troszkę kombinowane, ale ważne, że działa:
http://forum.kohanaphp.pl/index.php/topic,751.0.html
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.