fbpx

Encje doctrinowe – pola podstawowe

Encje doctrinowe – pola podstawowe

Z doctrinem pracuję już ponad dwa lata. Spotkałam w tym czasie w nim, zarówno wiele fajnych rozwiązań, jak i wiele problemów. W tym poście chciałam napisać jak Symfony 3 i encje doctrinowe współpracują ze sobą. Jednak zanim przejdę do szczegółów kilka słów wstępu. Gdy zaczynałam swoją przygodę z ORMami akurat na silexie. Od razu trafiłam na doctrina. Pamiętam, że byłam nim zachwycona. Obiekty ładnie mapowały się na tabele, a dqlki zastępowały zapytania ad hoc i wyglądały zdecydowanie lepiej. Co to były za czasy. Niestety tak jak dzieciństwo się kończy i człowiek zderza się z dorosłością, jak w związku mija etap zauroczenia, a motylki odlatują i zaczynamy zauważać swoje wady, tak i bezinteresowna miłość do Doctrina mija. Przynajmniej w moim przypadku i większości znajomych programistów.

Doświadcznie programisty jest odwrotne proporcjonalne do jego zachwytu ORMami.

Nie mówię, że Doctrine jest zły, wręcz przeciwnie, to bardzo fajne narzędzie, ale jednocześnie bardzo ograniczające przy bardziej skomplikowanych strukturach. Dla prostych aplikacji, gdzie nie mamy wielu zależności i rozbudowanej logiki biznesowej, jest jak znalazł.

Jak wyglądają encje doctrinowe

Jak już wiesz z poprzedniego postu, w Symfony wszystko jest bundlem. Za integracje frameworka z Doctrine ORM odpowiada właśnie DoctrineBundle i Doctrine Bridge. Encje doctrinowe, jak już wcześniej wspomniałam, to obiekty będące odpowiednikiem tabel w bazie danych. Jeśli tylko umieścimy klasy w katalogu Entity oraz skonfigurujemy je odpowiednio, Doctrine sam zmapuje dane na odpowiednie obiekty.

Przykładowo w projekcie prostą encją będzie Event. Poziada ona podstawowe pola odpowiadające danym, które chcę przechowywać o wydarzeniu, czyli m.in. typ, datę rozpoczęcia i zakończenia itp. Oczywiście razem z rozwojem projektu ta struktura będzie się rozszerzać. Z encjami wiążą się trzy elementy:

  • Pola podstawowe
  • Relacje
  • Dziedziczenie encji i discriminatory

Ten post jest pierwszą częścią serii o Doctrinie, w którym dokładniej przyjrzymy się definicji i obsłudze pól podstawowych. Kolejnym będą relacje, a ostatnim postem, dla bardziej zaawansowanych będzie dziedziczenie i discriminatory encji.

Wracając do encji, dla bardziej leniwych lub lubiących szybkie triki programistów i programistki Symfony i Doctrine Bundle udostępnia komendę konsolową generującą encję i jej konfigurację podstawową:

bin/console generate:doctrine:entity

Po zdefiniowaniu pól powstaje klasa encji oraz jej plik konfiguracyjny lub odpowiednie adnotacje. Jest jeszcze jedna opcja, która pozwala nam tworzyć encje na podstawie istniejącej już bazy danych, ale to rozbudowany temat na inny post.

Konfiguracja

Jest kilka sposobów na konfigurowanie encji:

  1. Adnotacje – cała konfiguracja jest w pliku encji a szczegóły definiujemy w komentarzu poprzez użycie @ORM wynikającej z użycia:
use Doctrine\ORM\Mapping as ORM; 

Dzięki adnotacjom zdefiniujemy typ kolumny, jej nazwę, dopuszczenie nulla i wiele więcej, praktycznie wszystko, co jest nam potrzebne. Poniżej przykład definicji asocjacji pola id oraz daty rozpoczęcia w formie adnotacji.

/**
 * @ORM\Id
 * @ORM\GeneratedValue(strategy="NONE")
 * @ORM\Column(type="guid")
 * @var string
 */
private $id;
/**
 * @ORM\Column(type="datetime", nullable=true)
 * @var \DateTime
 */
private $startDate;

Bardzo ważne w adnotacji jest określenie, gdzie encja ma swoje repozytorium i jaką tabelę reprezentuje:

/**
 * @ORM\Entity(repositoryClass="Backend\EventBundle\Repository\EventRepository")
 * @ORM\Table(name="events")
 */

2. Yml/XML — czyli plik znajdujący się w Resource/config/doctrine/. Osobiście wolę tę metodę, ponieważ całą definicję mam w jednym miejscu, oddzieloną od samej klasy encji. Uważam, że to bardziej estetyczny i łatwiejszy do utrzymania sposób.

Zapraszam na kolejny post z tej serii, w którym powiem trochę więcej o relacjach i konfiguracji w encji. Mam też do Ciebie pytanie. Jakie są Twoje doświadczenia z Doctrinem? Jesteś jego zwolennikiem czy przeciwnikiem?

Zgarnij darmowy ebook i cotygodniową dawkę wiedzy

.
Magdalena Limanówka-Kuciel
magdalena@panizkomputerem.pl

Jestem programistką, która lubi mieć ręce pełne roboty. Do życia potrzebuje komputera z internetem i kubka gorącej kawy. Więcej na stronie o mnie.