Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [Kohana] pobieranie danych z bazy przy użyciu ORM
Forum PHP.pl > Forum > PHP > Frameworki
wiciu010
Mam takie tabele:

USERS

  1. id | login | haslo | miasto | kraj | data_rejestracji


PHOTOS

  1. id | user_id


Korzystam z ORM i chciałbym otrzymać coś takiego:

  1. user_id | login | data_rejestracji | photo_id


Dodam tylko, że każdy użytkownik może mieć dowolną ilość zdjęć a ja chcę pobrać tylko 1 zdjęcie dla każdego użytkownika (sortowanie po id, pierwsze które wystąpi) Ponadto użytkownik może nie mieć żadnego zdjęcia i wtedy w wyniku w photo_id powinien być NULL

Jak takie coś uzyskać ?
destroyerr
Oj, to chyba nie wiesz czym jest ORM. Radzę uzupełnić wiedzę z tego zakresu, wtedy zrozumiesz swój błąd tongue.gif
wiciu010
Cytat(destroyerr @ 26.07.2010, 15:17:30 ) *
Oj, to chyba nie wiesz czym jest ORM. Radzę uzupełnić wiedzę z tego zakresu, wtedy zrozumiesz swój błąd tongue.gif


Czytałem, że jest to mapowanie na obiekty. Ale owszem pierwszy raz pracuję z ORM. Nie mam problemów z zapisem z pojedynczej tabeli ale z dwóch juz tak.
W modelach mam ustawione:

  1. class Model_Photo extends ORM
  2. {
  3. protected $_has_many = array('users' => array());
  4.  
  5. public function action_index()
  6. {
  7.  
  8. }
  9.  
  10. }


  1. class Model_User extends ORM
  2. {
  3. protected $_belongs_to = array('photo' => array());
  4. };
phpion
Więc tak.

1. Po co Ci metoda action_index w modelu? Takie metody umieszcza się w kontrolerze (no chyba, że masz ku temu powody albo po prostu nazwa jest myląca).
2. Relacje zrobiłeś w drugą stronę. Powinno być: 1 użytkownik ma n zdjęć, 1 zdjęcie należy do 1 użytkownika. U Ciebie natomiast: 1 zdjęcie ma n użytkowników, 1 użytkownik należy do 1 zdjęcia (chyba, że efekt ponownie zamierzony).

Co do pytania: w ORM tego nie zrobisz 1 sprytnym zapytaniem. Możesz pobrać obiekt użytkownika, a następnie tylko pierwszy element tablicy zdjęć poprzez $user->photos. Możesz też napisać zwykłe zapytanie (ręcznie lub poprzez Query Builder), które zwróci Ci dane w postaci tablicy lub obiektu (stdClass).
wiciu010
Cytat(phpion @ 26.07.2010, 15:56:14 ) *
Co do pytania: w ORM tego nie zrobisz 1 sprytnym zapytaniem. Możesz pobrać obiekt użytkownika, a następnie tylko pierwszy element tablicy zdjęć poprzez $user->photos. Możesz też napisać zwykłe zapytanie (ręcznie lub poprzez Query Builder), które zwróci Ci dane w postaci tablicy lub obiektu (stdClass).


A czy warto stworzyć w SQL widok i na nim operować ? co będzie szybsze operacje na widoku czy przetwarzanie ręcznego zapytania ? I czy jeśli zdecyduje sie na widok to też muszę tworzyć plik php dla modelu odpowiedzialnego za widok ? Bo rozumiem, że wtedy operuję na tym widoku tak samo jak na zwykłej tabeli
phpion
Widoki zawsze będą wolniejsze od swojego odpowiednika w zwykłym zapytaniu SQL. Widoki stosuje się głównie w celu ograniczenia informacji dla użytkowników (np. ukrycie zarobków pracowników dla pewnych grup użytkowników). Osobiście jednak stosuję je również jako uproszczenie wykonywanych zapytań; narzut w związku z widokiem nie jest jakoś specjalnie odczuwalny, ale (jak już wspomniałem) widok będzie wolniejszy.

Czy tworzyć osobny model dla widoku? To już zależy od Ciebie. Nic nie stoi na przeszkodzie by tak właśnie uczynić. Pamiętaj tylko o odpowiednim nazwaniu widoku (w liczbie mnogiej) oraz odpowiednich nazwach pól dla kluczy obcych.
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.
Invision Power Board © 2001-2025 Invision Power Services, Inc.