Mam pytanie odnośnie generowania relacji przez Gii. Otóż jeżeli mam relacje wiele do wielu to używam tabeli pośredniej w której są klucze obce pochodzące z tabel które są w tej relacji. Gii dla tabeli pośredniej (tbl_spin) generuje relacje takie:
Tak. Jeżeli nie zdefinujesz np. relacji w modelu tabeli pakiet, to nie będziesz miał jak wyszukać programów zawartych w danym pakiecie. I vice-versa. Pytanie dlaczego gii nie wygenerował tych relacji sam. Nie masz tam gdzieś przypadkiem kluczy złożonych?
tbl_spin (tabela łącząca tbl_program i tbl_pakiet bo tabele są w relacji wiele do wielu)
id_spin (int) PK
program_id (int) FK
pakiet_id (int) FK
tbl_pakiet
id_pakiet (int) PK
nazwa (varchar)
Najpierw generuję model dla tabeli ‘program’ potem ‘pakiet’ i na końcu ‘spin’ no i tylko dla spin daje relacje.
Generalnie mój widok który obsługuję to dla modelu ‘spin’ w którym to podpiąłem informację pochodzące z tabel źródłowych wg kluczy obcych i mogę wyszukiwać które programy są w jakich pakietach oraz jakie programy zawierają dane pakiety.
Tabele i klucze są OK. Okazało się, że należy najpierw generować model dla tabeli łączącej a dopiero później dla źródłowych. Teraz relacje są wygenerowane. Dla łączącej są typu BELONGS_TO a dla źródłowych typu HAS_MANY. Tak chyba powinno być, wg przewodnika Yii:
W terminologii AR, możemy wytłumaczyć relację wiele-do-wielu jako kombinację BELONGS_TO oraz HAS_MANY