Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP i SQL] wiele obiektów i ilośc zapytań do mysql
hub
post 22.03.2019, 14:04:10
Post #1





Grupa: Zarejestrowani
Postów: 10
Pomógł: 2
Dołączył: 21.02.2012

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


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?
Go to the top of the page
+Quote Post
kapslokk
post 22.03.2019, 14:08:58
Post #2





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


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.

Ten post edytował kapslokk 22.03.2019, 14:09:55
Go to the top of the page
+Quote Post
hub
post 22.03.2019, 14:19:46
Post #3





Grupa: Zarejestrowani
Postów: 10
Pomógł: 2
Dołączył: 21.02.2012

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


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?
Go to the top of the page
+Quote Post
kapslokk
post 22.03.2019, 14:27:29
Post #4





Grupa: Zarejestrowani
Postów: 965
Pomógł: 285
Dołączył: 19.06.2015
Skąd: Warszawa

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


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ą.

Ten post edytował kapslokk 22.03.2019, 14:28:20
Go to the top of the page
+Quote Post
hub
post 22.03.2019, 15:00:59
Post #5





Grupa: Zarejestrowani
Postów: 10
Pomógł: 2
Dołączył: 21.02.2012

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


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ąć
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 Wersja Lo-Fi Aktualny czas: 28.03.2024 - 14:45