Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [ZF][ZF2][ZendFramework2]CRUD na relacyjnej bazie danych
Forum PHP.pl > Forum > PHP > Frameworki
siankotm
Witam,
czy biblioteki ZF w wersji 2.2 oferują jakieś rozwiązania związane z "rekursywnymi" operacjami na połączonych tabelach w bazie danych?
Mam przykładowo tabele Osoba oraz Pracownik połączone relacją 1:N. Odpowiednia klasa Pracownik zawiera atrybuty (pola składowe) "swojej" tabeli oraz jedno pole stanowiące referencję do odpowiedniego obiektu klasy Osoba.
Zastanawiam się, czy istnieje mechanizm, który sprawi, że modyfikując nazwisko w obiekcie klasy Pracownik, automatycznie zaktualizowany zostanie odpowiedni rekord w tabeli Osoba. Oczywiście chciałbym także, aby mechanizm właściwie działał również przy pobieraniu (mapowaniu) danych z bazy.

Czytałem, że ZF 1 oferował jakąś obsługę relacji, ale w ZF2.2 nic takiego nie znalazłem - co wydało mi się dość dziwne, bo przecież operacje CRUD na relacyjnych bazach danych są normą w większości aplikacji.

Pozdrawiam wink.gif
lucio1988
Na chwilę obecną zf2 nie wspiera zapisu danych w sposób przez Ciebie opisany. Jedną z opcji jest pobranie Pracowników podczas zapisu w Serwisie. Jeżeli musisz przy tym korzystać z transakcji to zapis musisz wykonać ręcznie w mapperze/tablegateway.

Service Osoba:
  1. public function insert($data) {
  2. $this->getMapper()->insert($data);
  3. $persons = $data->getPersons();
  4.  
  5. $this->getPersonService()->multiinsert($persons);
  6. }


Bazy danych strasznie kuleją w zf2, Zend/Db wspieraja jedynie podstawowe możliwości. Przy bardziej zaawansowanych select/insert/update trzeba podpinać doctrine lub bawić się w ręczne pisanie zapytań.
RiE
Proponowałbym skorzystać z gotowego modułu Doctrine 2 do Zend Framework 2. DoctrineORMModule. Konfiguracja bardzo prosta, wystarczy podać dane do bazy danych i możemy korzystać z dobrodziejstw ORM, gdzie mechanizm o którym wspomniałeś jest czymś standardowym.
W kontrolerze wystarczy:
  1. $em = $this->getServiceLocator()->get('Doctrine\ORM\EntityManager');

I mamy dostęp do Entity Managera.

Tutaj jeszcze krótka prezentacja pokazująca współprace ZF2 i Doctrine 2.
http://marco-pivetta.com/doctrine-orm-zf2-tutorial/#/

Ewentualnym rozwiązaniem jest stworzenie z istniejących bibliotek Zenda własnego systemu do zarządzania relacjami, ale będzie to raczej bardzo prymitywne DBAL, tylko pytanie czy jest sens wymyślać koło na nowo?
siankotm
Dziękuję za odpowiedzi. Jednak zdecyduję się na Doctrine.
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.