Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [Kohana] pobieranie danych z bazy przy użyciu ORM
wiciu010
post
Post #1





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


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ć ?

Ten post edytował wiciu010 26.07.2010, 14:31:00
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 5)
destroyerr
post
Post #2





Grupa: Zarejestrowani
Postów: 879
Pomógł: 189
Dołączył: 14.06.2006
Skąd: Bytom

Ostrzeżenie: (0%)
-----


Oj, to chyba nie wiesz czym jest ORM. Radzę uzupełnić wiedzę z tego zakresu, wtedy zrozumiesz swój błąd tongue.gif
Go to the top of the page
+Quote Post
wiciu010
post
Post #3





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


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. };


Ten post edytował wiciu010 26.07.2010, 15:06:51
Go to the top of the page
+Quote Post
phpion
post
Post #4





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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).
Go to the top of the page
+Quote Post
wiciu010
post
Post #5





Grupa: Zarejestrowani
Postów: 195
Pomógł: 0
Dołączył: 29.04.2007

Ostrzeżenie: (0%)
-----


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
Go to the top of the page
+Quote Post
phpion
post
Post #6





Grupa: Moderatorzy
Postów: 6 072
Pomógł: 861
Dołączył: 10.12.2003
Skąd: Dąbrowa Górnicza




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.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 21.08.2025 - 19:18