kicaj
23.07.2008, 19:55:51
Mam dwie tabele, tab1 i tab2 oraz relacje tab1_tab2
Teraz ukladam formularz: input( 'tab1.pole' ), input( 'tab2.pole' ), po wyslaniu dodaje tylko rekord to tabeli, z ktorej jest kontroler (np. tab1).
Jak zrobic aby poprzez formularz powstawala relacja (rekord do tab1, tab2 i tab1_tab2)?
zupa23
20.08.2008, 10:14:43
tu masz przykład mojego autorstwa, kod z kontrolera należącego do modelu, który jest powiązany z modelem Tag relacją habtm. w skrócie musisz odnaleźć id tego drugiego obiektu i umieścić w odpowiednim miejscu w tablicy data. w poniższym kodzie jeżeli obiekt nie zostanie znaleziony to jest tworzony i jego id jest pobierane i wstawiane.
1: if(isset($this->data['Tag'])) {
2: $i = 0;
3: $t = new Tag;
4:
5: foreach ($this->data['Tag'] as $tag_data):
6: if($result = $t->findByKeyword($tag_data)) {
7: $this->data['Tag']['Tag'][$i] = $result['Tag']['id'];
8: }
9: else {
10: $t_data['Tag']['keyword'] = $tag_data['keyword'];
11: $t->save($t_data);
12: $this->data['Tag']['Tag'][$i] = $t->getLastInsertID();
13: }
14: $i++;
15: endforeach;
16: unset($t);
17: unset($keyword);
18: }
A teraz mój problem: dodaję albo edytuję obiekt, który jest powiązany z innym relacją habtm, niech będzie to jakiś obiekt i związane z nim tagi/keywordy, tak jak w kodzie powyżej. z natury relacji wiele-do-wielu wynika, że z moim obiektem może być powiązana rożna ilość tagów. jak to rozwiązać w formularzu? gdybym chciał dodać kolejne tagi to muszę go chyba jakoś powiększyć, dodać kolejne pola, ale jak?
strongwarecki
29.01.2009, 22:12:55
To proste pozwól użytkownikowi wpisać w polu formularza wile wyrazów, później w kontrolerze potnij go wpisane string'a funkcją explode. a następnie swoją trochę zmodyfikowaną funkcją dodaj po kolei powstałe tagi
data['Tag']['Tag'][0]=$id_dodango_taga;
data['Tag']['Tag'][1]=$id_dodango_taga_2;
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.