Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> Zbyt wiele zapytań?
ayeo
post
Post #1





Grupa: Przyjaciele php.pl
Postów: 1 202
Pomógł: 117
Dołączył: 13.04.2007
Skąd: 127.0.0.1

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


Witam!
W ramach próby zrozumienia obiektowego podejścia piszę bazę danych o filmach. Mam kilka wątpliwości. Mam klasę Movie, która zawiera prywatne własności jak: id, tytuł, rok produckji, reżyser, opis, gatunek... Id odpowiada id z bazy danych. Konstruktor na podstawie Id wypełnia obiekt danmi z bazy, jeżeli id nie zostało podane tworzy pusty obiekt, ktory można wypelnic za pomoca metod dostepowych. Jest jeszcze flaga change, a destruktor zapisuje zmiany do bazy jezeli została ustwiona.
Jeżeli wyszukiwarka zwróci powiedzmy 15 pasujących filmów (ich id) to do stworzenia 15 obiektów potrzeba 15 dodatkowych zapytań!! Myślałem o dodatkowej klasie MovieManager, która na podstawie jednego zapytania tworzylaby w petli puste obiekty Movie i wypelniala je danymi z wczesniejszego zapytania.

Proszę o jakieś sugestie!
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi
Cezar708
post
Post #2





Grupa: Zarejestrowani
Postów: 1 116
Pomógł: 119
Dołączył: 10.05.2005
Skąd: Poznań

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


tak to jest jedna z wad ORM, że w sumie tak naprawdę musiałbyć mieć tyle zapytań, na szczęście jest rozwiązanie, możesz stworzyć tę swoją klasę MovieManager lub możesz stworzyć statyczną metodę w klasie Movie i za jej pomocą możesz pobierać większe kolekcje danych, poniżej przykład:

  1. <?php
  2. class Movie {
  3. // twoj dotychczasowy kod 
  4. // ..
  5.  
  6. public static function getByPk($arrPk){
  7. $strPk = implode ( "', '", $arrPk );
  8. $sqlSelect = "SELECT * FROM movies WHERE id IN ('$strPk') ";
  9. $arrMovies = dataBase::$db->getAll($sqlSelect);
  10. $arrReturn = array();
  11. foreach ($arrMovies as $movie){
  12. $objMovie = Movie();
  13. $objMovie->setId($movie['id']);
  14. // .. i pozostale pola
  15. $arrReturn[] = $objMovie; 
  16. } 
  17. return $arrReturn;
  18. }
  19.  
  20. }
  21. ?>


aczkolwiek stworzenie klasy MovieManager (lub MovieCollector) jest lepszym i bardziej przejrzystym rozwiązaniem
Go to the top of the page
+Quote Post

Posty w temacie


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: 14.10.2025 - 09:56