Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: ORM i zwracanie danych w formie obiektów
Forum PHP.pl > Forum > PHP > Object-oriented programming
adbacz
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?
lukaskolista
Wszystko pieknie opisales, ale zapomniales dodac, o jaki ORM ci chodzi. Podaj nazwe/framework
adbacz
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?
lukaskolista
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.
adbacz
Modułu to znaczy? Możesz rozwinąć myśl?
irmidjusz
@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.
adbacz
Dziękuję Ci za wyjaśnienie tej kwestii.
irmidjusz
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).
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.