Doctrine – nazwa rodziny bibliotek dla PHP 5.3 do kompleksowej obsługi komunikacji z bazami danych.
Doctrine 1.x reprezentuje tabele relacyjnych baz danych w postaci klas modeli oraz udostępnia interfejs do zarządzania danymi za ich pomocą. W przeciwieństwie do innych rozwiązań tego typu, biblioteka potrafi wygenerować modele na podstawie już istniejącej struktury bazy danych, dzięki czemu nie jest konieczne zarządzanie rozbudowanymi schematami w formacie XML. Wygenerowane modele można rozbudowywać o dodatkową funkcjonalność, jakiej potrzebuje programista. Możliwa jest także praca ze schematem w formacie YAML, który służy do generowania zarówno modeli, jak i struktury bazy danych.
Wśród innych możliwości biblioteki znajdują się:
- Wsparcie dla przechowywania struktur drzewiastych w bazie danych.
- Obsługa hooks (metod sprawdzających poprawność oraz filtrujących dane) i zdarzeń ułatwiająca wyrażenie dodatkowej logiki biznesowej.
- Wsparcie dla transakcji
- Mechanizm Cache
- Współdzielone zachowania (ang. behaviors), które mogą być wykorzystywane przez modele.
- Wsparcie dla migracji baz danych (aktualizacji struktury).
Doctrine 2.0 składa się z szeregu mniejszych bibliotek odpowiedzialnych za różne aspekty pracy z bazami danych. Podstawową biblioteką jest Doctrine DBAL stanowiąca warstwę abstrakcji bazy danych. Rozszerza ona PHP Data Objects o dodatkowe funkcjonalności oraz wprowadza tzw. mechanizm platform, które opisują możliwości i różnice między dialektami języka SQL używanymi przez różne systemy zarządzania bazą danych. Na bazie DBAL zbudowana jest biblioteka ORM. W stosunku do poprzednich wydań, jej architektura oraz używana terminologia uległa całkowitej przebudowie.
Możliwości:
- język Doctrine Query Language do formułowania zapytań z jasną, jednoznaczną gramatyką i możliwością rozbudowy o nowe elementy,
- lekkie obiekty encji – Doctrine nie narzuca żadnych interfejsów, ani klas do rozszerzenia,
- wsparcie dla transakcji oraz inteligentne kolejkowanie zapytań do wykonania w celu uzyskania jak największej wydajności,
- opis struktury bazy danych poprzez mechanizm adnotacji, lub w formatach XML/YAML,
- wsparcie dla dziedziczenia tabel na poziomie biblioteki,
- duże możliwości rozszerzania,
- mechanizm buforowania.