[PHP i SQL] wiele obiektów i ilośc zapytań do mysql |
[PHP i SQL] wiele obiektów i ilośc zapytań do mysql |
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? |
|
|
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 |
|
|
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? |
|
|
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 |
|
|
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 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ąć |
|
|
Wersja Lo-Fi | Aktualny czas: 1.11.2024 - 00:54 |