Drukowana wersja tematu

Kliknij tu, aby zobaczyć temat w orginalnym formacie

Forum PHP.pl _ Frameworki _ [CakePHP] Wyciąganie informacji z 2 tabeli

Napisany przez: patrol114 16.08.2011, 17:36:43

Witam,

uczę się dopiero CakePHP od jakiegoś czasu, pisze portal społecznościowy chciał bym wyciągać informacje użytkownika który wpisał sobie coś na swoją tablice.

Tutaj mam kod profilu

  1. function profil( $id = null ){
  2. $validationError;
  3. $userData;
  4.  
  5. if ( $this->Auth->user() ) {
  6.  
  7. $userData = $this->User->read(null, $this->Auth->user('id'));
  8.  
  9. if( !http://www.php.net/empty( $this->data ) ){
  10. $this->Author->id = $this->Auth->user('id');
  11.  
  12. if(http://www.php.net/empty($this->data['User']['haslo'])) {
  13.  
  14. if(http://www.php.net/empty($this->data['User']['haslo'])) $this->data['User']['haslo'] = $userData['User']['haslo'];
  15.  
  16. if( $this->User->save( $this->data ) ){
  17.  
  18. }else{
  19. // błąd w validacji
  20. $validationError = $this->User->validationErrors ;
  21. }
  22. }else{
  23. $this->User->set( $this->data );
  24. $this->User->validates();
  25. $validationError = $this->User->invalidFields(); ;
  26. }
  27. }
  28.  
  29. }else{
  30. $this->Session->setFlash(__('Błędny używkonik.', true));
  31. }
  32.  
  33.  
  34. $this->data = $this->User->read(null, $this->Auth->user('id'));
  35. $this->data['User']['haslo'] = "";
  36.  
  37. if( http://www.php.net/isset($validationError) ) $this->Author->validationErrors = $validationError;
  38. $this->set('user', $this->data );
  39.  
  40. }


Posiadam w modelu User funkcje hasMany połączony z tabela ['Table']

Chciał bym wyświetlać tablice użytkownika tak

  1. <?PHP http://www.php.net/echo $user['Table']['opis']; ?>


Piekarnikiem zbudowałem sobie model controller view dla tablicy.

Informacje z Tabeli User wyświetla normalnie np. Imię i Nazwisko zalogowanego użytkownika.

Nie wiem czy poprawnie wszystko piszę jeśli gdzieś zrobiłem błąd proszę o poprawienie.

Napisany przez: kicaj 16.08.2011, 17:40:48

Wpisz sobie w widoku:

Kod
pr($user);
i pokaz wynik

Napisany przez: patrol114 16.08.2011, 17:42:59

  1. http://www.php.net/array
  2. (
  3. [User] => http://www.php.net/array
  4. (
  5. [id] => 42
  6. [email] => patrol114@gmail.com
  7. [imie] => Patryk
  8. [nazwisko] => Dabrowski
  9. [haslo] =>
  10. [miejscowosc] => sdfaaa
  11. [gg] => sdfaaa
  12. [tell] => sdfaaa
  13. [sex] => M
  14. [urodzony] => 1993-07-09
  15. )
  16.  
  17. [Table] => http://www.php.net/array
  18. (
  19. [0] => http://www.php.net/array
  20. (
  21. [id] => 1
  22. [temat] => Siema
  23. [opis] => Czesc
  24. [user_id] => 42
  25. [data] => 2011-08-09
  26. )
  27.  
  28. )
  29.  
  30. )

Napisany przez: kicaj 16.08.2011, 17:45:29

Teraz mozesz wyswietlic

Kod
echo $user['Table'][0]['opis'];

Napisany przez: patrol114 16.08.2011, 17:51:15

Mógłbyś wyjaśnić dlaczego takie zastosowanie ?

Napisany przez: kicaj 16.08.2011, 17:58:01

W Cake'u istnieja m.in relacje typu hasMany oraz hasOne (odpowiednio: maDuzo i maJednego... - jeszcze tego w ten sposob nie tlumaczylem:)

Otoz...
Relacja hasOne sluzy do tego jest np. 1 User ma 1 Profile (uzytkownik posiada profil - dane charakterystyczne w wystepujace tylko raz: imie, nazwisko, itd.)
Relacja hasMany sluzy do tego ze np. 1 User ma ileś Odpowiedzi (np. na forum - zalozyl ileś tematow).

Przyklad:
Wyswietl informacje o samochodzie i jego poprzednich kierowcach:
Car hasOne Engine (samochod posiada silnik) AND Car hasMany Drivers (...i posiada grupę kierowców)

Nie wiem czy to zrozumiale...

Dla wyswietlenia wynikow hasMany wystarczy wyswietlic $car['Car']['engine'] natomiast kierowcow nalezy potraktowac petla 'foreach' ze wzgledu ze jest to tabela wynikow...

Napisany przez: patrol114 16.08.2011, 18:17:29

lecz po foreach on nie wie co to jest ' Table '

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)