Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> ORM i zwracanie danych w formie obiektów, Różnica pomiędzy jednym a wieloma rekordami z DB
adbacz
post
Post #1





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Jeśli mamy mapowanie rekordów na obiekty, to każdy rekord jest jednym obiektem więc przy jednym rekordzie zwróconym z DB, dany ORM zwraca nam jeden obiekt roprezentujący ten rekord. Gdy DB zwróci więcej niż jeden obiekt to co? ORM zwraca tablice obiektów?

Teraz pytanie. Co, jeśli jest tak jak napisałem wyżej, i do końca nie wiemy dokładnie, co zostanie nam zwrócone, jeden czy więcej obiektów. W takim razie zostaje mi tylko sprawdzanie zwróconej wartości i if - else tak?
Go to the top of the page
+Quote Post
lukaskolista
post
Post #2





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Wszystko pieknie opisales, ale zapomniales dodac, o jaki ORM ci chodzi. Podaj nazwe/framework

Ten post edytował lukaskolista 3.08.2012, 07:13:28
Go to the top of the page
+Quote Post
adbacz
post
Post #3





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Nie opisywałem na konkretnym przykładzie ORM-a. Chodziło mi o ogólną zasadę działania. Aż tak bardzo różnią się np Doctrine od Propel?
Go to the top of the page
+Quote Post
lukaskolista
post
Post #4





Grupa: Zarejestrowani
Postów: 872
Pomógł: 94
Dołączył: 31.03.2010

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


Nie tylko doctrine i propel istnieja. Jesli pytasz sie o to, jaki typ danych zwraca metoda to nie jest juz kwestia ogolej konwencji ORM, a konkretnego modulu.
Go to the top of the page
+Quote Post
adbacz
post
Post #5





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Modułu to znaczy? Możesz rozwinąć myśl?
Go to the top of the page
+Quote Post
irmidjusz
post
Post #6





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


@adbacz: tak łopatologicznie: to jest tak jak opisałeś, zależnie od użytej metody ORM zwracają albo obiekty, albo kolekcje.
Zawsze to samo powinno być zwracane, to jest proste. Gdy metoda może zwrócić tylko i wyłącznie (zawsze) jeden obiekt (lub nic), to zwraca obiekt, tak jest w przypadku pobierania filtrowanego z kluczem unikatowym (czy zazwyczaj kluczem głównym, który z założenia jest zawsze unikatowy). Czyli piszesz sobie taką metodę do pobierania obiektu po primary key i ona zawsze zwraca albo znaleziony obiekt, albo null.
A pozostałe metody, które mogą zwracać więcej wierszy, zwracają zawsze kolekcje. Takie kolekcje są puste, gdy nie ma wierszy, ale nie powinno to być null, bo trzeba by wtedy sprawdzać czy jest null czy nie jest, a jak zawsze jest kolekcją to można np. od razu wstawiać do foreach, które się najwyżej nie wykona. Dla tych metod nawet jak w wyniku jest jeden obiekt, to jest to kolekcja z jednym obiektem.
Go to the top of the page
+Quote Post
adbacz
post
Post #7





Grupa: Zarejestrowani
Postów: 532
Pomógł: 24
Dołączył: 15.04.2011
Skąd: Kalisz

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


Dziękuję Ci za wyjaśnienie tej kwestii.
Go to the top of the page
+Quote Post
irmidjusz
post
Post #8





Grupa: Zarejestrowani
Postów: 279
Pomógł: 60
Dołączył: 25.02.2012

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


To jeszcze takie uzupełnienie, bo zapomniałem o tym poprzednio: w ORMach powszechnie też stosuje się metody typu "findOneRow", do których przekazuje się zwykle jakieś kryteria filtrowania, i te metody, jak sama nazwa wskazuje, też zawsze zwracają tylko jeden obiekt, nawet, gdyby mogło by ich być więcej w wynikach zapytania. Zwracany jest zawsze pierwszy obiekt i w zasadzie te metody same troszczą się o dodanie odpowiedniej klauzuli wybierającej tylko jeden wiersz z wykonywanego zapytania (np. LIMIT 1).
Go to the top of the page
+Quote Post

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

 



RSS Aktualny czas: 24.10.2026 - 04:14