![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
Witajcie.
Mam mały problem z prostymi relacjami w Ciasteczku. Najpierw diagram (IMG:http://piotrows.pl/imgs/relacje.png) Relacje w Cake: Dla Planet mam ustawioną relację - belongsTo Player, foreign_key = player_id Dla Player mam relacje: - hasMany Planet, foreign_key = player_id - belongsTo Alliance foreign_key = alliance_id Dla Alliance - nasOne Player foreign_key = alliance_id Probelm. Muszę pobrać wszystkie rekordy z Planet o określonych warunkach. Dostaję np. 7 wyników Z automatu pobiera mi się gracz przypisany do Planet po id (czyli jest ok). Teraz chciałbym żeby jeszcze dossało się Ally przypisane do Player jeżeli jest zdefiniowane. No i tu problem bo nie bardzo wiem jak sobie z tym poradzić. Chcąc odwołać się przez Kod $this->Player->Alliance->find() nie zwraca mi poprawnie wyników, chyba że ja nie umiem skonstrułować warunków (IMG:style_emoticons/default/biggrin.gif) Jeżeli coś trzeba dpoisać to pytajcie. |
|
|
![]() |
![]()
Post
#2
|
|
Grupa: Zarejestrowani Postów: 673 Pomógł: 106 Dołączył: 31.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
|
|
|
![]()
Post
#3
|
|
Grupa: Zarejestrowani Postów: 1 640 Pomógł: 28 Dołączył: 13.02.2003 Skąd: Międzyrzecz/Poznań Ostrzeżenie: (0%) ![]() ![]() |
Relacje są takie:
Player hasMany Planet (Planet belongsTo Player) Alliance hasOne Player (Player belongsTo Alliance) Wywołanie $this->Player->find('all') powinno zwrócić tablice m.in z relacją Alliance z domyślnie ustawioną rekurencją. Pokaż ustawienia relacji w modelach. Ten post edytował kicaj 21.08.2013, 20:16:13 |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
*r4xz - tego nie widziałem (IMG:style_emoticons/default/smile.gif) Muszę poczytać i się zainteresować bo to cyba rozwiąże mój problem
*kicaj Planet Kod public $belongsTo = array( 'Player' => array( 'className' => 'Player', 'foreignKey' => 'player_id' ) ); Player Kod public $hasMany = array( 'Planet' => array( 'className' => 'Planet', 'foreignKey' => 'player_id', 'dependent' => true ) ); public $belongsTo = array( 'Alliance' => array( 'className' => 'Alliance', 'foreignKey' => 'alliance_id' ) ); Alliance Kod public $hasOne = array( 'Player' => array( 'className' => 'Player', 'foreignKey' => 'alliance_id' ) ); Jak widać bardzo skromnie (IMG:style_emoticons/default/smile.gif) PS. Operację pobierania danych wykonuję w modelu Planet bo to ona jest głównym pkt. zaczepienia do wyświetlania informacji --- EDITED --- Udało mi się rozwiązać tem problem. Wybawieniem było containable W modeli Bazowym do zapytania o planety dodałem: Kod 'contain' => array( 'Player' => array('Alliance') ) i zadziałało tak jak chciałem (IMG:style_emoticons/default/smile.gif) Dziękuję za nakierowanie i pozdrawiam Ciastkowiczów (IMG:style_emoticons/default/smile.gif) Ten post edytował Pyton_000 21.08.2013, 20:46:00 |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 673 Pomógł: 106 Dołączył: 31.12.2008 Ostrzeżenie: (0%) ![]() ![]() |
PS Warto dodać w AppModel:
Dzięki temu mamy większą kontrole nad zapytaniami (domyślnie pobiera dane tylko z jednego modelu) i dostosowujemy tą wartość w zależności od potrzeby przed każdym zapytaniem (IMG:style_emoticons/default/wink.gif) Ten post edytował r4xz 21.08.2013, 21:58:55 |
|
|
![]() ![]() |
![]() |
Aktualny czas: 25.08.2025 - 05:52 |