Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [ZF][ZF2][ZendFramework2]CRUD na relacyjnej bazie danych, Praca z relacjami w ZF 2.2
siankotm
post
Post #1





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.05.2009

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


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 (IMG:style_emoticons/default/wink.gif)
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 3)
lucio1988
post
Post #2





Grupa: Zarejestrowani
Postów: 10
Pomógł: 3
Dołączył: 19.11.2013
Skąd: Białystok

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


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ń.
Go to the top of the page
+Quote Post
RiE
post
Post #3





Grupa: Zarejestrowani
Postów: 97
Pomógł: 45
Dołączył: 5.05.2010

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


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?
Go to the top of the page
+Quote Post
siankotm
post
Post #4





Grupa: Zarejestrowani
Postów: 6
Pomógł: 0
Dołączył: 2.05.2009

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


Dziękuję za odpowiedzi. Jednak zdecyduję się na Doctrine.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 18.09.2025 - 16:04