Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP i SQL] wiele obiektów i ilośc zapytań do mysql
Forum PHP.pl > Forum > PHP > Object-oriented programming
hub
hej,
mam następujące klasy:
-klient (może zawierać wiele obiektów - projektów)
-projekt

Nie mogę sobie wyobrazić, jak skonstrukować relację między nimi, żeby robiąc np. podsumowanie wyników wszystkich projektów jednego klienta wykonać jak najmniej zapytań do bazy.
Jeżeli w obiekcie klienta będę przechowywał obiekty projektów - to pobranie danych z bazy, dla każdego z nich będzie wymagało takiej liczby zapytań ile jest projektów. Brzmi to mega nieoptymalnie, jeżeli mógłbym zrobić jedno zapytanie wyciągające z bazy dane dot. wszystkich projektów danego klienta.
Czy normalną praktyką jest operowanie na jednej tabeli bazy danych w dwóch różnych klasach? Jeżeli później będę chciał wprowadzić zmianę w tej tabeli to będę musiał wprowadzać zmiany we wszystkich klasach, w których ta tabela jest wykorzystywana - nie brzmi to jak prawidłowe z punktu widzenia OOP rozwiązanie. Co w takiej sytuacji? Dla każdej tabeli indywidualna klasa-model?
kapslokk
Relacja one-to-many. Jeden klient - wiele projektów.
Tworzysz oddzielne tabele klient i projekt, w tabeli projekt masz id klienta. Na podstawie tego ID możesz robić JOIN'a w zapytaniu i wyciągać wszystkie projekty klienta jednym zapytaniem. Później to odpowiednio grupujesz/przetwarzasz w PHP i tyle.
hub
tak, to rozumiem i nie chodzi mi o format zapytania do bazy
jak to ugryźć z uwzględnieniem wzorców projektowych (ciężko nazwać mi fachowo problem i nie mogę wygooglać rozwiązania, które odpowiadałoby na moje pytanie)

W klasie projektu tworzę metodę do wyciągania danych np. results(), która zawiera zapytanie do bazy po id projektu.

Jak powinno się rozwiązać results() dla klienta, jeżeli to suma wszystkich projektów?
1. do obiektu klienta wrzucić obiekty projektów i pętlą wywoływać Project->results() ?
2. czy zdefiniować zapytanie do bazy w Client->results() po id klienta?
kapslokk
Chyba próbujesz zrobić coś w stylu Active Record...
Myślałeś nad podejściem np. takim, żeby klasy Klient i Projekt miały tylko właściwości/metody, które dotyczą ich danych i dodatkowo stworzyć jakieś Repozytoria, które będą służyć do wyciągania danych nt. Projektów/Klientów?

Chodzi mi o oddzielenie klas służących do wyciągania danych z bazy od klas, które faktycznie te dane reprezentują.
hub
wielkie dzięki smile.gif to jest dokładnie to czego mi brakowało - dodanie dodatkowej warstwy odpowiadającej za wyciąganie danych
ograniczałem się wyobraźnią do MVC (dosłownie 3 warstw wynikających z nazwy) i nie dało się tego w ogóle sensownie ogarnąć
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-2020 Invision Power Services, Inc.