Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] ORM, $has_many w konfiguracji: tabela1 - tabela-łącząca - tabela2
barthpl
post
Post #1





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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

Ten post edytował barthpl 14.09.2009, 17:55:03
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
laohost
post
Post #2





Grupa: Zarejestrowani
Postów: 19
Pomógł: 2
Dołączył: 12.09.2009

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.

Ten post edytował laohost 14.09.2009, 17:56:14
Go to the top of the page
+Quote Post
barthpl
post
Post #3





Grupa: Zarejestrowani
Postów: 142
Pomógł: 35
Dołączył: 5.12.2006
Skąd: Wrocław

Ostrzeżenie: (0%)
-----


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 (IMG:style_emoticons/default/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.
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 12:27