Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF] Modelowanie modelów
Forum PHP.pl > Forum > PHP > Frameworki
CuteOne
Witam,

mam mały problem z zaprojektowaniem modelów bazy danych.

Tak standardowo wyglądają zapytania, których dotychczas używałem (szybkie w pisaniu, toporne w edycji)
  1. $query = $db -> select() -> setIntegrityCheck(false);
  2. $query -> from(array('u'=>'user'), array())
  3. -> joinLeft(array('ud'=>'user_data'), 'ud.user_id = u.user_id')
  4. -> joinLeft(array('ude'=>'user_data_ext'), 'ude.user_id = u.user_id', array())
  5. -> joinLeft(array('um'=>'user_mails'), 'um.user_id = ud.id')
  6. -> where("u.user_id = ?", $id);
  7.  
  8. $users = $db -> fetchAll($query);

Powyższy przykład zawiera relacje jeden do jednego i jeden do wielu.

W jaki sposób za pomocą mapowania przekształcić powyższy przykład w prawidłowy zapis opisany tutaj ?

Dodatkowy problem to n+1 zapytań do bazy gdy używam relacji przedstawionych w przykładzie z powyższego linku - czy da się to jakoś obejść?
Fluke
Jeśli chcesz to jakoś uprościć(co wydaje mi się bez sensu bo jest to prawidłowe) musisz wykonać instrukcję SELECT która pobierze 1 rekord a następnie w pętli będziesz szukał za pomocą instrukcji findDependentRowset() bądź findManyToManyRowset(). W ten sposób możesz pobrać kolejne dane w relacji.
CuteOne
Dzięki za odpowiedź smile.gif Problem polega na tym, że tego tupu zapytania nie pasują mi do mapowania bazy, innymi słowy - po cholerę mam tworzyć mappery(referencedMap i dependentTables) oraz entity skoro będą bezużyteczne w 90% przypadków. Drugi problem leży w dopisywaniu zmian za pomocą pluginów (o co chodzi z pluginami opisałem tutaj). W tym momencie niemożliwe jest nadpisywania/dopisywanie zmian bez zmian w treści zapytania lub nadpisywaniu samej metody w modelu.

Eh gdyby istniała możliwość pobierania danych tak aby Zend tworzył złożone zapytanie na podstawie samego referencedMap a nie n+1 zapytań ;/
melkorm
Mapowanie w Zendzie ssie i nic na to nie poradzisz, albo piszesz zapytania z palca (tak jak masz w przykładzie który wkleiłeś) (co dla mnie jest okej, wolę to nawet niż korzystać z Doctrine 2 gdzie przy teraźniejszym projekcie mnie czasami *** strzela), lub możesz podpiąć pod Zend'a DC2 i tam masz to całe mapowanie załatwione w pewnym sensie smile.gif


PS. Zresztą, ZF jest w tym momencie trochę ... stary i uporczywy, dlaczego nie pomyślisz na przesiadką na ZF2 lub SF2 (gdzie jest DC2 i tak ;p).
CuteOne
W tym momencie przejście na SF2 lub Doctrine 2 nie jest możliwe (nie ja o tym decyduję). Dlatego szukam rozwiązania do ZF1, które w logiczny sposób nakreśli w jaki sposób pobierać dane bez pisania zapytań z palca smile.gif

Hmm, może jest jakiś sposób spoza obszarów samego Zenda(pomijając ORM'y), który będzie elastyczny na zmiany i intuicyjny w tworzeniu ?
viking
Mnie też zawsze taki zapis bardziej pasował niż D2 gdzie nawet edytor sensownie nie jest w stanie podpowiedzieć składni. Raz mi się zdarzyło z tego mapowania korzystać ale dużo bardziej intuicyjne jest właśnie to co napisałeś. A może sobie wykorzystasz Zend\Db z ZF2? Tam to w pewnym sensie lepiej rozwiązali (jak kto lubi wink.gif ).
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.