Andrzej Martynowicz

Andrzej Martynowicz Starszy inżynier
oprogramowania
(Java/JEE), Tieto
Poland

Temat: Frameworki do ORM w PHP

Siema, tak się zastanawiam nad użyciem jakiegoś frameworka do mapowania obiektowo - relacyjnego w php. Doświadczenie w pracy z takimi mam w zasadzie tylko w javie (hibernate, jpa), ale w php nie pracowałem z tego typu bibliotekami.

Macie jakieś doświadczenia co do wydajności, możliwości i czy możecie coś polecić? Jeśli ktoś używał jakiegoś konkretnego frameworka to interesuje mnie też czy czegoś tam brakowało (np. ktoś chciał zrobić mapowanie kolekcji obiektów, a tu się okazało, że tylko pojedyncze obiekty da się mapować... coś w tym stylu :))

Dzięki

konto usunięte

Temat: Frameworki do ORM w PHP

Doctrine troche zalatuje tak JPA (a juz bardzo bedzie nim zalatywal od wersji 2).
Pracowalem glownie z wersjami 1.x, maja troche problemow z bardziej skomplikowanymi zapytaniami, w szczegolnosci jak zawieraja w selecie rzeczy typu COUNT, SUM, MAX, itp. Jest tez dosc kiepska obsluga widokow.
Doctrine jest takim obudowaniem warstwy dostepu do bazy jakim jest PDO.

Do dyspozycji jest jeszcze Propel na ktorym sie nie znam ;)

Edit:
Linki:
http://www.doctrine-project.org/
http://www.propelorm.org/Marcin Olichwirowicz edytował(a) ten post dnia 11.08.10 o godzinie 18:14

konto usunięte

Temat: Frameworki do ORM w PHP

Jesli masz dostep do PHP 5.3 rozwaz PHP Activerecord - http://www.phpactiverecord.org/

Jest sporo lzejszy niz podane wczesniej a z punktu widzenia wiekszosci projektow oferuje praktycznie to samo.

konto usunięte

Temat: Frameworki do ORM w PHP

Paweł Krefta:
Jesli masz dostep do PHP 5.3 rozwaz PHP Activerecord - http://www.phpactiverecord.org/

Jest sporo lzejszy niz podane wczesniej a z punktu widzenia wiekszosci projektow oferuje praktycznie to samo.

Ciekawa rzecz, nie widzialem tego wczesniej. Pomijajac kwestie wydajnosciowe wydaje mi sie to nawet wygodniejsze pod wzgledem odczytu danych od Doctrine'a. Nice.
Andrzej Martynowicz

Andrzej Martynowicz Starszy inżynier
oprogramowania
(Java/JEE), Tieto
Poland

Temat: Frameworki do ORM w PHP

Ok dzięki za odpowiedzi.

Ogólnie podchodzę trochę sceptyczenie do wszystkiego co jest oparte o wzorzec Active Record. Fakt programuje się coś takiego super szybko, ale potem jak trzeba zmienić nazwę pola w bazie danych to już robią się problemy, ale dzięki wielkie za wskazanie tego frameworka bo prezentuje się całkiem nieźle, więc na pewno rzucę okiem i może się czasem skuszę do użycia:)

Co do properla to nie wygląda źle, ale tak szybko szukając nie znalazłem w dokumentacji nic na temat mapowania relacji (jeden do wielu itp), choć np. dziedziczenie jest obsłużone w porządku. Ogólnie to jednak obawiam się że może mieć trochę kluczowych braków i chyba nie skorzystam. Pozatym konfiguracja jest na xml'u, więc trzeba się trochę plików mapowań natworzyć.

Co do doctrune to przejrzałem dokumentację do wersji 2.0beta i .... jestem pod wrażeniem. S>H>I>T> muszę przyznać że nie spodziewałem się czegoś tak dojrzałego w php... nie znalazłem na pierwszy rzut oka zadnych typowych braków... chodź pewnie tak jak Paweł piszesz w generowanych SQL'ach mogą być babole (tego w dokumentacji nie napiszą raczej :)).... ale ogólnie wypasik. No i jeszcze do tego obsługuje Adnotacje!.. bye bye xml... muszę przyznać, że chyba się skuszę... mimo przypuszczalnych baboli w wersji beta :D

Jeszcze raz wielkie dzięki.
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: Frameworki do ORM w PHP

Witam,

rok temu byłem w podobnej sytuacji. Miałem doświadczenie wyłącznie z Hibernate, a musiałem podjąć decyzję dotyczącą ORM dla aplikacji w PHP.

Mój lokalny PHPowy guru wskazał mi dwie propozycje najbliższe Hibernate:

1. propel
Co do properla to nie wygląda źle, ale tak szybko szukając nie znalazłem w dokumentacji nic na temat mapowania relacji (jeden do wielu itp), choć np. dziedziczenie jest obsłużone w porządku.

To, co go zdyskwalifikowało u mnie rok temu, był brak obsługi relacji wiele-do-wielu. Sprawdziłem teraz, najnowsza wersja już to wspiera:
http://www.propelorm.org/wiki/Documentation/1.5/WhatsN...
Co do doctrune to przejrzałem dokumentację do wersji 2.0beta i .... jestem pod wrażeniem. S>H>I>T> muszę przyznać że nie spodziewałem się czegoś tak dojrzałego w php... nie znalazłem na pierwszy rzut oka zadnych typowych braków... chodź pewnie tak

Co nie zmienia faktu, że pewnie Cię jeszcze zaskoczy :) Zaznaczam, że moje skromne doświadczenia dotyczą wersji 1.1.4 i 1.2.2.
jak Paweł piszesz w generowanych SQL'ach mogą być babole (tego w dokumentacji nie napiszą raczej :)).... ale ogólnie wypasik.

2. Użyliśmy Doctrine 1.1.4 - wersja stabilna sprzed roku. Było w miarę miło i przyjemnie. Do czasu, kiedy przyszło nam użyć złożonego warunku w raw SQL. Doctrine zaczął sypać kompletnie nic nie mówiącymi wyjątkami, po czym okazało się, że w przypadku złożonego warunku, np "WHERE (c.foo = ?)AND(c.bar = ?)" pomiędzy słowem kluczowym a nawiasem MUSI być spacja... Znalazłem to w JIRA, tam chłopcy-doctrinowcy jasno wyartykułowali, że fix będzie w wersji 1.2. Zmigrowaliśmy zatem na 1.2.2 :)

Poza tym typu ładowania EAGER/LAZY nie uświadczysz na poziome klas mapujących, realizujesz to przez podanie wprost JOINa w zapytaniu. Nawiasem mówiąc, DQL jest naprawdę mocno inspirowany HQLem, więc pewnie poczujesz się jak w domu. Kolekcje, relacje, dziedziczenie - to działa jak złoto.

Nie pamiętam zasadniczych wad dyskwalifikujących Doctrine, sporo naszych problemów wynikało z kompletnie innej konstrukcji języka (PHP vs Java). No i musisz uważać na spory narzut wydajnościowy.
No i jeszcze do tego obsługuje Adnotacje!.. bye bye xml... muszę przyznać, że chyba się skuszę... mimo przypuszczalnych baboli w wersji beta :D

Z tego, co czytam o D2.0, to już pewnie będzie przyjemne narzędzie. Ale nie ufamy betom :)

Pozdrawiam.Marcin MOLGA edytował(a) ten post dnia 12.08.10 o godzinie 09:51
Andrzej Martynowicz

Andrzej Martynowicz Starszy inżynier
oprogramowania
(Java/JEE), Tieto
Poland

Temat: Frameworki do ORM w PHP

przypadku złożonego warunku, np "WHERE (c.foo = ?)AND(c.bar = ?)" pomiędzy słowem kluczowym a nawiasem MUSI być spacja... Znalazłem to w JIRA, tam chłopcy-doctrinowcy jasno wyartykułowali, że fix będzie w wersji 1.2. Zmigrowaliśmy zatem na 1.2.2 :)

Hehe... uwielbiam tego typu błędy w bibliotekach do pehapa:) No i właśnie ich się najbardziej obawiam.
Poza tym typu ładowania EAGER/LAZY nie uświadczysz na poziome klas mapujących, realizujesz to przez podanie wprost JOINa w zapytaniu.

No fakt przejrzałem dokumentację 1.2 i wygląda na to, że tam faktycznie trzeba dodać joina żeby ładować załadować "łapczywie";):

http://www.doctrine-project.org/blog/doctrine-lazy-loa...

Dzięki za tę uwagę, bo to faktycznie bardzo istotna kwestia. Natomiast z tego co widzę w wersji 2.0 już można to zdefiniować na poziomie mapowania, np. dla relacji one-to-one:

http://www.doctrine-project.org/projects/orm/2.0/docs/...

No i to już wygląda bardzo ciekawie... :)
Nawiasem mówiąc, DQL jest naprawdę mocno inspirowany HQLem, więc pewnie poczujesz się jak w domu. Kolekcje, relacje, dziedziczenie - to działa jak złoto.

Oki... miło słyszeć i faktycznie oglądając przykłady wygląda to nieźle w obu wersjach 1.2 i 2.0.
Nie pamiętam zasadniczych wad dyskwalifikujących Doctrine, sporo naszych problemów wynikało z kompletnie innej konstrukcji języka (PHP vs Java). No i musisz uważać na spory narzut wydajnościowy.

No tak racja. PHP/doctrine za każdym razem musi od nowa zczytać definicje mapowań, zainicjować bebehy, no i wykonać naszą logikę.. Java sobie przynajmniej raz załaduje mapowania i potem już tylko narzut związany z samym procesem mapowania. Słuszna uwaga.
Z tego, co czytam o D2.0, to już pewnie będzie przyjemne narzędzie. Ale nie ufamy betom :)

No tak do poważnego systemu to bym "betonu" też nie wpuszczał, ale ja mam w sumie jeden taki mały projekcik, w którym mogę zaryzykować. Mam nadzieję, że po kliku godzinach pracy z 2.0 nie zaczne spamować JIRY ;)

Dzięki i pozdr.Andrzej Martynowicz edytował(a) ten post dnia 11.08.10 o godzinie 22:50

konto usunięte

Temat: Frameworki do ORM w PHP

Panowie w na prawdę poważnych projektach, to ten cały DQL może się schować. Pracowałem z Doctrine dość długo i na prawdę, nie polecam tego dodatkowego kilkuwarstwowego, opóźniającego, nic szczególnego nie dającego layera PDO. Zacznijcie pisać widoki, to później w kodzie php będziecie mieli aż tyle zapisu:

SELECT * FROM "someView" WHERE "someView"."someColumn" = 34;

Dobre co? Słyszeli Panowie o klasie GenericObject, oraz GenericObjectCollection? Nie? To zachęcam. Nie ma na prawdę sensu zaprzęgać kobyły co wozu nie uciągnie.

konto usunięte

Temat: Frameworki do ORM w PHP

Przemek Czekaj:
Panowie w na prawdę poważnych projektach, to ten cały DQL może się schować. Pracowałem z Doctrine dość długo i na prawdę, nie polecam tego dodatkowego kilkuwarstwowego, opóźniającego, nic szczególnego nie dającego layera PDO. Zacznijcie pisać widoki, to później w kodzie php będziecie mieli aż tyle zapisu:

SELECT * FROM "someView" WHERE "someView"."someColumn" = 34;

Nie chce tutaj zaczynac jakiegos flame'a ale to tylko oznacza, ze nie pracowales przy naprawde duzych projektach.

Troche pokory.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Frameworki do ORM w PHP

Przemek Czekaj:
Panowie w na prawdę poważnych projektach, to ten cały DQL może się schować. Pracowałem z Doctrine dość długo i na prawdę, nie polecam tego dodatkowego kilkuwarstwowego, opóźniającego, nic szczególnego nie dającego layera PDO. Zacznijcie pisać widoki, to później w kodzie php będziecie mieli aż tyle zapisu:

SELECT * FROM "someView" WHERE "someView"."someColumn" = 34;

Dobre co? Słyszeli Panowie o klasie GenericObject, oraz GenericObjectCollection? Nie? To zachęcam. Nie ma na prawdę sensu zaprzęgać kobyły co wozu nie uciągnie.
Nie był bym taki prędki do stosowania widoków. W jednym CRM, który współtworzyłem z Marcinem O. używaliśmy widoków na potęgę - było ich chyba ze 100. Wszystko było fajnie dopóki nie trzeba było czegoś zmodyfikować. To była droga przez mękę jeżeli widoki zależały nawzajem od siebie, sam musiałem napisać specjalny skrypt, który rekurencyjnie wywalał te widoki bo inaczej to nie szło.

Tak czy inaczej jest to pewne rozwiązanie (tworzenie widoków) natomiast uważam, że trzeba zastosować odpowiednie narzędzie do odpowiedniego problemu i jego skali. Active Record raczej nie sprawdzi się w projektach o skomplikowanej logice ze względu na mieszanie warstw, tam najlepszy będzie ORM klasy DataMapper. Natomiast przy aplikacji, która z kolei mało zapisuje i głównie prezentuje jakieś dane z bazy widoki będą odpowiednie.Wojciech Soczyński edytował(a) ten post dnia 12.08.10 o godzinie 09:18
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Frameworki do ORM w PHP

Przemek Czekaj:
Panowie w na prawdę poważnych projektach, to ten cały DQL może się schować. Pracowałem z Doctrine dość długo i na prawdę, nie polecam tego dodatkowego kilkuwarstwowego, opóźniającego, nic szczególnego nie dającego layera PDO. Zacznijcie pisać widoki, to później w kodzie php będziecie mieli aż tyle zapisu:

Masz rację, nie ma co z armatą na muchy.

Może tutaj koledzy używając Doctrina poczują się jak w domu - bardzo nawiązuje do JPA, Hibernate. Jednakże w phpie wygląda to trochę inaczej, każdy request tworzy wszystko od nowa, nie mamy tutaj serwera aplikacji. Do tego dochodzą zapytania, które tworzy Doctrine, nie wiadomo co za spaghetti z tego wyjdzie (chociaż w JPA też różnie z tym jest - zależnie od implementacji/dostawcy).
Andrzej Martynowicz:
Co do doctrune to przejrzałem dokumentację do wersji 2.0beta i .... jestem pod wrażeniem. S>H>I>T> muszę przyznać że nie spodziewałem się czegoś tak dojrzałego w php...

^^ ...a jest jeszcze wiele innych fajnych rzeczy :D

konto usunięte

Temat: Frameworki do ORM w PHP

Artur Świerc:
Przemek Czekaj:
Panowie w na prawdę poważnych projektach, to ten cały DQL może się schować. Pracowałem z Doctrine dość długo i na prawdę, nie polecam tego dodatkowego kilkuwarstwowego, opóźniającego, nic szczególnego nie dającego layera PDO. Zacznijcie pisać widoki, to później w kodzie php będziecie mieli aż tyle zapisu:

Masz rację, nie ma co z armatą na muchy.

Może tutaj koledzy używając Doctrina poczują się jak w domu - bardzo nawiązuje do JPA, Hibernate. Jednakże w phpie wygląda to trochę inaczej, każdy request tworzy wszystko od nowa, nie mamy tutaj serwera aplikacji. Do tego dochodzą zapytania, które tworzy Doctrine, nie wiadomo co za spaghetti z tego wyjdzie (chociaż w JPA też różnie z tym jest - zależnie od implementacji/dostawcy).

Skąd to info, że na muchy? Może to spory serwis :)
Fakt, że każdy request tworzy wszystko od nowa ale mamy takie rzeczy jak APC czy XCache co skutecznie przyspiesza Doctrine'a.
Artur Świerc

Artur Świerc Programista PHP/Java

Temat: Frameworki do ORM w PHP

Marcin Olichwirowicz:
Skąd to info, że na muchy? Może to spory serwis :)
Fakt, że każdy request tworzy wszystko od nowa ale mamy takie rzeczy jak APC czy XCache co skutecznie przyspiesza Doctrine'a.

Andrzej napisał że ma "jeden taki mały projekcik", chociaż może to być pojęcie względne :)
Marcin Molga

Marcin Molga Senior Solution
Architect, IBM.

Temat: Frameworki do ORM w PHP

Przemek Czekaj:
nic szczególnego nie dającego layera PDO. Zacznijcie pisać widoki, to później w kodzie php będziecie mieli aż tyle zapisu:

A jak sobie radzisz z utrzymaniem i synchronizacją takiego systemu widoków? Masz mocno zmienne warunki biznesowe, kilka środowisk uruchomieniowych (deweloperskie, test, preprodukcja, produkcja). Jest oczywiście Liquibase, ale IMHO wygodniej zarządzać zmianami w kodzie, niż w bazie.

Pozdrawiam.
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Frameworki do ORM w PHP

imho doctrine jest zajebiste jak masz duzo operacji typu CRUD, natomiast jak twoj app ma agregowac dane, robic statystyki i wszelkiego rodzaju operacje na calych zbiorach to zapomnij o doctrine :P

konto usunięte

Temat: Frameworki do ORM w PHP

Widoki, widoki i jeszcze raz widoki. To są bardzo przyjazne interfejsy, nie ma nic piękniejszego, Poza tym stosujemy Panowie "przestrzeń nazw" w bazie, czyli u mnie w postgresie to są schematy. Jak mamy takie piękne schematy, to później już tylko drop drop drop drop. Co ja Wam będę zdradzał moje techniki programowania, wypuszczę FW to sami zobaczycie ;]

Zgadzam się z Arturem Świerc, tylko nie uważam że Doctrine to armata. Na dodatek mam złe zdanie o developerach Doctrine.
Wojciech Soczyński

Wojciech Soczyński Programista
eksplorator -
blog.wsoczynski.pl

Temat: Frameworki do ORM w PHP

Przemek Czekaj:
... Co ja Wam będę zdradzał moje techniki programowania, wypuszczę FW to sami zobaczycie ;]

Generalnie, ja już zacząłem sobie schron przygotowywać :PWojciech Soczyński edytował(a) ten post dnia 12.08.10 o godzinie 10:40

konto usunięte

Temat: Frameworki do ORM w PHP

Ja chyba i tak pozostanę przy technikach stosowanych przez architektów i senior developerów a nie młodszych programistów :)

Btw. Ciekawi mnie czemu masz złe zdanie o developerach Doctrine?
Łukasz C.

Łukasz C. Senior Technical
Architect

Temat: Frameworki do ORM w PHP

Przemek Czekaj:
Widoki, widoki i jeszcze raz widoki. To są bardzo przyjazne interfejsy, nie ma nic piękniejszego, Poza tym stosujemy Panowie "przestrzeń nazw" w bazie, czyli u mnie w postgresie to są schematy. Jak mamy takie piękne schematy, to później już tylko drop drop drop drop. Co ja Wam będę zdradzał moje techniki programowania, wypuszczę FW to sami zobaczycie ;]
nic odkrywczego jak narazie nie napisales :P
a widoki tez nie sa idealne zwlaszcza w wydaniu mysql :P
nie ma narzedzia idealnego, doctrine ma swoje zalety ale ma takze wady, widoki i procedury skladowanie rownierz :P
Zgadzam się z Arturem Świerc, tylko nie uważam że Doctrine to armata. Na dodatek mam złe zdanie o developerach Doctrine.
napisz orm tej klasy to bedziesz wtedy po nich jezdzil :P

konto usunięte

Temat: Frameworki do ORM w PHP

@Marcin Olichwirowicz

Jak myślisz, skądś się o tym dowiedziałem co? Zgadnij od kogo ;]

@Łukasz Cepowski

Co ja Ci poradzę, nie używam MySQL, nie chce, i jak nie będę musiał, to nie będę jej używał.

@Wojciech Soczyński

Bardzo śmieszne ;p

@Doctrine dev

Dlaczego mam złe zdanie o tych panach? Bo ile kroć próbowałem z nimi porozmawiać ( na ircu ) o nowościach w doctrine, albo wytykałem im błędy w manualu, to się w piórka obrali, focha strzelili i tyle rozmowy. Jest takie powiedzenie: "Wyżej sra niż dupę ma". Odzwierciedla ich stosunek w 100%. A ten cały johto (core dev), to ma takie ego, że gdyby stanęło obok niego to swoim cieniem by go zabiło, umarł by w ciemności. Jeszcze jak się dowiedzieli że jestem z Polski, to już w ogóle nie miałem po co wchodzić na kanał.

Nie wiem, ale czy o programistach z Polski już też mają wyrobione zdanie? Aż tacy zaje**** jesteśmy że nas ignorują bo im zazdrość z oczu patrzy? :P

Następna dyskusja:

Frameworki (PHP/PHP5)




Wyślij zaproszenie do