Pracuję nad rozszerzeniem istniejącej aplikacji PHP. Niestety dla mnie obecna aplikacja to bałagan. To wszystko kod spaghetti z surowymi wywołaniami mysql_ *. Jęk. Nie ma mowy, żebym to zrobił w częściach, które poszerzam.Potrzebujesz prostego narzędzia ORM lub DBAL dla istniejącej aplikacji PHP
Poszukuję prostego ORM DBAL, który mogę łatwo wpuścić i zacząć używać. Żądane funkcje:
- Musi działać na istniejącym schemacie bazy danych. Najlepiej przy minimalnej lub żadnej dodatkowej konfiguracji. Istniejący schemat bazy danych ma taką samą jakość jak istniejący kod PHP (brak rozsądnych konwencji nazewnictwa, nie jest znormalizowany itp.). Nie chcę poświęcać dni na ręczne przekształcanie schematu bazy danych w właściwości adnotowanych obiektów a la Doctrine 2.
- Musi być w stanie pracować równolegle z istniejącymi surowymi zapytaniami mysql_ *. Nie mam pojęcia, jak nawilżające ORM, takie jak Doctrine 2 lub Propel, zachowują się, gdy skrypty ręcznie manipulują danymi w bazie danych za ich plecami, ale zakładam, że nie jest ładna.
- Musi działać na PHP 5.2.x. Chciałbym kochać używać PHP 5.3, ale nie mam żadnego interesu w przeglądaniu istniejących 125K wierszy kodu spaghetti, aby upewnić się, że działa on na PHP 5.3.
- Relacje nie są wymagane. W kilku miejscach potrzebuję danych relacyjnych, z chęcią zadzwonię na dodatkowe
find()
lubquery()
lub cokolwiek samemu. - Punkty premiowe, jeśli ma obsługę niektórych wyzwalaczy (np.
beforeSave
,afterSave
). Nie jest to wymaganie, ale po prostu przyjemne.
Edytuj: Ktoś wyrzucił mnie z mojej nędzy. Właśnie dowiedziałem się, że linie 125K kodu spaghetti zmieniają również schemat bazy danych. Np. Dodaj gdzieś dodatkową opcję i zacznij latać cały szereg instrukcji ALTER TABLE. Mogłabym prawdopodobnie wypełnić roczną wartość TheDailyWTF z tą bazą kodu. Jeszcze jedno wymaganie:
- Musi być w stanie poradzić sobie automatycznie ze zmieniającym się schematem bazy danych (np. Dodając kolumny).
Szukałem kilku rozwiązań, ale nie jestem pewien, jak dobrze by one działały, biorąc pod uwagę wymagania. Doctrine 2, RedBeanPhp i tym podobne wymagają PHP 5.3, więc nie działają. Istnieje starsza wersja RedBeanPhp dla PHP 5.2.x, ale nie wiem, czy działałaby z niechlujnym, istniejącym schematem bazy danych. Notorm wygląda dobrze, jeśli chodzi o pobieranie danych, ale nie wiem, czy można go skonfigurować dla istniejącego schematu bazy danych i jak łatwo można przywrócić dane do bazy danych.
Idealnie chciałbym coś prostego. Np:
$user = User::find($id);
$user->name = 'John Woo';
$user->save();
Lub:
$articles = ORM::find('article')->where('date' => '2010-01-01');
foreach ($articles as $article) {
echo $article->name;
}
Wszelkie wskazówki lub nawet alternatywne rozwiązania są mile widziane!
Od kilku tygodni używam Idiorm i Paris w aplikacji i bardzo to lubię! –