Wprowadzenie do Doctrine ORM

Podobne dokumenty
Laboratorium 6 Tworzenie bloga w Zend Framework

Baza danych sql. 1. Wprowadzenie

Laboratorium 7 Blog: dodawanie i edycja wpisów

Baza danych sql. 1. Wprowadzenie. 2. Repozytaria generyczne

PODSTAWOWE POJĘCIA BAZ DANYCH

Podstawy technologii WWW

Projektowanie baz danych za pomocą narzędzi CASE

Sprawdzenie czy połączenie przebiegło poprawnie if (mysqli_connect_errno()) { echo Błąd; Połączenie z bazą danych nie powiodło się.

Wdrożenie modułu płatności eservice. dla systemu Gekosale 1.4

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Instrukcja laboratoryjna

BACKUP BAZ DANYCH FIREBIRD

Laboratorium nr 5. Bazy danych OpenOffice Base.

Bazy danych Ćwiczenie 1 Instrukcja strona 1 Wersja ogólna

Wdrożenie do projektu

5.4. Tworzymy formularze

Dokumentacja systemu NTP rekrut. Autor: Sławomir Miller

BAZY DANYCH. Co to jest baza danych. Przykłady baz danych. Z czego składa się baza danych. Rodzaje baz danych

5.1. MINIPOS MINIPOS. INSTALACJA ORAZ URUCHOMIENIE USŁUGI

Podstawowe wykorzystanie Hibernate

Microsoft Access materiały pomocnicze do ćwiczeń cz. 1

Kurier Siódemka (by CTI)

Stosowanie, tworzenie i modyfikowanie stylów.

5.3. Tabele. Tworzenie tabeli. Tworzenie tabeli z widoku projektu. Rozdział III Tworzenie i modyfikacja tabel

Ćwiczenia laboratoryjne nr 11 Bazy danych i SQL.

Instrukcja użytkownika aplikacji npodpis r.

PHP może zostać rozszerzony o mechanizmy dostępu do różnych baz danych:

Budowa aplikacji ASP.NET współpracującej z bazą dany do obsługi przesyłania wiadomości

Laboratorium 1 Wprowadzenie do PHP

Currenda EPO Instrukcja Konfiguracji. Wersja dokumentu: 1.3

Encje w Drupalu. Tworzenie własnych encji i ich wpływ na poprawę wydajności

Katalog książek cz. 2

Microsoft.NET: ASP.NET MVC + Entity Framework (Code First)

LINQ TO XML. Autor ćwiczenia: Marcin Wolicki

Integracja Comarch e-sprawozdania

5.1. POSMOBILE POSMOBILE. INSTALACJA ORAZ URUCHOMIENIE USŁUGI

LABORATORIUM 8,9: BAZA DANYCH MS-ACCESS

Instrukcja obsługi/instalacji platformy Krok w Przedsiębiorczość Administrator platformy

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

InPost PACZKOMATY. (Moduł Magento 2) v Strona 1 z 18

Podstawy technologii WWW

Symfonia Produkcja. Kreator raportów. Wersja 2013

WYPOŻYCZALNIA BY CTI INSTRUKCJA

Autor: Joanna Karwowska

Do pola Hasło wpisujemy stare hasło, a następnie przyciskamy przycisk Zaloguj się.

Instalacja modułu DHL24 w sklepie Magento

PUE ZUS Wysyłka elektronicznych zapytan. Instrukcja wysyłki zapytań do ZUZ-PUE za pomocą aplikacji Komornik SQL

Instytut Mechaniki i Inżynierii Obliczeniowej fb.com/groups/bazydanychmt/

Aplikacje WWW - laboratorium

Typ danych. Karta ogólne. Rozmiar pola Liczba całkowita długa. Autonumerowanie. Rozmiar pola 50. Tekst. Rozmiar pola 50. Tekst. Zerowa dł.

Instrukcjaaktualizacji

AZACO Eksporter. Instrukcja konfiguracji oraz automatycznego eksportu danych. Przygotowanie środowiska...2. Konfiguracja zadań eksportu danych...

Integracja programów LeftHand z systemem Skanuj.to

8. Listy wartości, dodatkowe informacje dotyczące elementów i przycisków

E:\DYDAKTYKA\ZAI\ZWWW\Laboratoria\L07\Java Persistence.doc 2011-lis-24, 17:0 Zaawansowane aplikacje internetowe Laboratorium Java Persistence.

PWI Instrukcja użytkownika

Wdrożenie modułu płatności eservice. dla systemu Magento

Instalacja NOD32 Remote Administrator

Aplikacje WWW - laboratorium

INFORMATYKA MÓJ SPOSÓB NA POZNANIE I OPISANIE ŚWIATA PROGRAM NAUCZANIA INFORMATYKI Z ELEMENTAMI PRZEDMIOTÓW MATEMATYCZNO-PRZYRODNICZYCH

Symfonia Produkcja Instrukcja instalacji. Wersja 2013

Bazy danych. Wykład IV SQL - wprowadzenie. Copyrights by Arkadiusz Rzucidło 1

Kostki OLAP i język MDX

Instrukcja automatycznego tworzenia pozycji towarowych SAD na podstawie danych wczytywanych z plików zewnętrznych (XLS).

KORZYSTANIE Z BAZY DANYCH UpToDate

TEMAT ĆWICZENIA Zapoznanie z technologią LINQ

Program RMUA. Instrukcja konfiguracji i pracy w programie. (Wersja 2)

Instytut Mechaniki i Inżynierii Obliczeniowej Wydział Mechaniczny technologiczny Politechnika Śląska

Konspekt do lekcji informatyki dla klasy II gimnazjum. TEMAT(1): Baza danych w programie Microsoft Access.

7. Formularze master-detail

Projektowanie oprogramowania. Warstwa integracji z bazą danych oparta na technologii ORM Platforma Java EE Autor: Zofia Kruczkiewicz

Podręcznik użytkownika Wprowadzający aplikacji Wykaz2

Wdrożenie modułu płatności eservice. dla systemu Zen Cart

Wprowadzenie do projektu QualitySpy

NHibernate Hibernate dla platformy.net. Hibernate posiada także dużą społeczność, zatem nietrudno uzyskać jakieś wsparcie w przypadku problemów.

Karty pracy. Ustawienia. W tym rozdziale została opisana konfiguracja modułu CRM Karty pracy oraz widoki i funkcje w nim dostępne.

Podręcznik użytkownika Publikujący aplikacji Wykaz2

Edytor Edit+ - dodawanie zdjęć i. załączników. Instrukcja użytkownika

Leszek Stasiak Zastosowanie technologii LINQ w

OvidSP - Skrócony opis wyszukiwania - Wyszukiwanie proste i złożone,

Po wybraniu formatu wskazujemy ścieżkę, gdzie archiwum ma zostać zapisane. Ścieżka wraz z nazwą pliku zostanie wyświetlona

Budowa aplikacji z graficznym interfejsem użytkownika - GUI (Graphic User Interface)

1. Proszę wejść na stronę: poczta.home.pl i zalogować się do nowej skrzynki za pomocą otrzymanych danych.

Praca w programie dodawanie pisma.

Ceneo. (Moduł Magento) v.1.5.0

Podręcznik administratora Systemu SWD ST Instrukcja instalacji systemu

Materiały oryginalne: ZAWWW-2st1.2-l11.tresc-1.0kolor.pdf. Materiały poprawione

Jak utworzyć plik SIO dla aktualnego spisu?

Tworzenie bazy danych na przykładzie Access

Platforma e-learningowa

Założenia do ćwiczeń: SQL Server UWM Express Edition: \SQLEXPRESS. Zapoznaj się ze sposobami użycia narzędzia T SQL z wiersza poleceń.

Język SQL Złączenia. Laboratorium. Akademia Morska w Gdyni

Załącznik 2 utworzenie projektu

UNIWERSYTET RZESZOWSKI KATEDRA INFORMATYKI

Tworzenie raportów. Ćwiczenie 1. Utwórz Autoraport przedstawiający tabelę Studenci

Laboratorium nr 4. Temat: SQL część II. Polecenia DML

Włączanie/wyłączanie paska menu

BAZA_1 Temat: Tworzenie i modyfikowanie formularzy.

Bazy danych raporty. 1. Przekopiuj na dysk F:\ bazę M5BIB.mdb z dysku wskazanego przez prowadzącego.

Transkrypt:

Wprowadzenie do Doctrine ORM Przygotowanie środowiska Do wykonania ćwiczenia konieczne będzie zainstalowanie narzędzia Composer i odpowiednie skonfigurowanie Netbeans (Tools->Options->Framework & Tools->Composer, wskazujemy ścieżkę do pliku composher.phar). Tworzenie projektu Podczas tworzenia nowego projektu wykorzystamy Composer do pobrania biblioteki Doctrine i dodania jej do projektu: Uruchamiamy kreator New Project; w 4 kroku NIE zaznaczamy Doctrine na liście frameworków; w ostatnim kroku kreatora: o wpisujemy doctrine w polu Token i klikamy Search; o z listy w polu Packages wybieramy doctrine/orm, z listy rozwijanej Version wybieramy 2.4.7 i klikamy przycisk >. Konfiguracja Doctrine Kod z konfiguracją i inicjalizacją Doctrine umieścimy w pliku bootstrap.php: <?php use Doctrine\ORM\Tools\Setup; use Doctrine\ORM\EntityManager; require_once "vendor/autoload.php"; // użyjemy konfiguracji XML // pliki konfiguracyjne będą umieszczone w katalogu config $isdevmode = true; $config = Setup::createXMLMetadataConfiguration(array( DIR."/config"), $isdevmode); // definicja połączenia z bazą danych $conn = array( 'driver' => 'pdo_mysql', 'dbname' => 'biblioteka', 'user' => 'biblioteka', 'password' => 'biblioteka', 'host' => 'localhost', ); // stworzenie obiektu Entity Managera $entitymanager = EntityManager::create($conn, $config); Strona 1 z 5

Podczas pracy z Doctrine będziemy korzystali z pewnego narzędzia wywoływanego z linii poleceń. Aby działało ono poprawnie, w katalogu projektu musimy umieścić plik o nazwie cli-config.php z następującą zawartością: <?php use Doctrine\ORM\Tools\Console\ConsoleRunner; require_once 'bootstrap.php'; return ConsoleRunner::createHelperSet($entityManager); Przygotowanie definicji mapowania Do mapowania struktur bazy danych na klasy można wykorzystać adnotacje w kodzie, pliki YAML lub pliki XML. Skorzystamy z plików XML wygenerujemy je automatycznie na podstawie bazy danych. Aby wygenerować pliki mapowania, otwórz linię poleceń, przejdź do katalogu projektu i wykonaj polecenie: vendor\bin\doctrine orm:convert:mapping --from-database xml config Zajrzyj do wygenerowanych plików mapowania znajdują się w katalogu config. Wygenerowane encje nazywają się tak, jak tabele w bazie danych czyli odpowiednio Ksiazki i Wydawnictwa. Jest to mylące, gdyż pojedynczy obiekt encji ma reprezentować pojedynczą książkę. Zmieńmy zatem nazwy na liczbę pojedynczą, odpowiednio na Ksiazka i Wydawnictwo: o zmień odpowiednio nazwy plików z mapowaniem (Ksiazka.dcm.xml, Wydawnictwo.dcm.xml); o w plikach mapowania XML zmień nazwy encji: w encji Wydawnictwa: <entity name="wydawnictwo" table="wydawnictwa"> w encji Ksiazki: <entity name="ksiazka" table="ksiazki"> oraz w relacji do wydawnictw: <many-to-one field="wydawnictwo" target-entity="wydawnictwo"> Strona 2 z 5

Na podstawie plików XML wygenerujemy klasy encji (klasy Ksiazka oraz Wydawnictwo). Stwórz w projekcie folder o nazwie entities. Z linii poleceń wydaj komendę: vendor\bin\doctrine orm:generate:entities entities Przyjrzyj się klasom wygenerowanym w katalogu entities. Pobranie encji z bazy danych Na stronie głównej, w index.php, wyświetlimy tabelkę z książkami. Musimy załączyć pliki z inicjalizacją Doctrine oraz z definicją encji. W pliku index.php umieść następujący kod: require 'bootstrap.php'; require 'entities/ksiazka.php'; require 'entities/wydawnictwo.php'; Następnie możemy zadać zapytanie w języku DQL pobierzmy z bazy wszystkie encje typu Ksiazka i wyświetlmy w tabelce: $dql = "SELECT b FROM Ksiazka b"; $query = $entitymanager->createquery($dql); $ksiazki = $query->getresult(); echo '<table>'; echo '<tr><th>id</th><th>tytuł</th><th>wydawnictwo</th></tr>'; foreach ($ksiazki as $k) { $id = $k->getid(); $tytul = $k->gettytul(); $nazwawydawcy = $k->getwydawnictwo()->getnazwa(); $idwydawcy = $k->getwydawnictwo()->getid(); echo "<tr><td>{$id}</td><td>{$tytul}</td> <td>[{$idwydawcy}] {$nazwawydawcy}</td></tr>"; } echo '</table>'; Zwróć uwagę na dostęp do pól pochodzących z encji Wydawnictwo Doctrine automatycznie dba o zapewnienie dostępu do powiązanych encji. W przypadku prostych zapytań, zamiast pisać zapytanie DQL możemy skorzystać z repozytorium skojarzonego z danym typem encji zamiast trzech linijek z zapytaniem DQL i wywołaniem metod createquery() i getresult(), umieść następujący kod: $repo = $entitymanager->getrepository('ksiazka'); $ksiazki = $repo->findall(); Strona 3 z 5

Repozytoria mają też inne metody do pobierania danych, np. według klucza głównego albo dowolnego innego pola, na przykład: $k = $repo->find(3); $k = $repo->findoneby(['tytul' => 'Biblia MySQL']); $k = $repo->findby(['wydawnictwo' => 3]); Wypróbuj powyższe metody pobierając i wyświetlając pod tabelką tytuły wybranych, pojedynczych książek. Zapisywanie danych do bazy modyfikacja i tworzenie rekordów Modyfikację istniejącej książki przeprowadzimy następująco: pobierzemy encję (na przykład zapytaniem DQL, metodą find() z repozytorium, lub też metodą find() z klasy EntityManager), zmienimy wybrane pola obiektu, zapiszemy obiekt metodą persist() menedżera encji, zatwierdzimy zapis wszystkich danych do bazy metodą flush() menedżera encji. // Modyfikacja obiektu - znajdź, zmień, zapisz $ksiazkatelefoniczna = $entitymanager->find('ksiazka', 1); $ksiazkatelefoniczna->settytul('zmieniony tytul'); $entitymanager->persist($ksiazkatelefoniczna); $entitymanager->flush(); Tworzenie nowej książki przeprowadzimy następująco: pobierzemy z bazy wybrane wydawnictwo, aby je następnie skojarzyć z tworzoną książką; stworzymy obiekt klasy Ksiazka i wypełnimy danymi; podobnie jak przy modyfikacji wywołamy persist() oraz flush(). $helion = $entitymanager->find('wydawnictwo', 2); $nowaksiazka = new Ksiazka(); $nowaksiazka->settytul('testowy tytul 2'); $nowaksiazka->setautor('jan Kowalski'); $nowaksiazka->setwydawnictwo($helion); $entitymanager->persist($nowaksiazka); $entitymanager->flush(); Strona 4 z 5

Zadanie 1 Zaimplementuj funkcjonalność dodawania książek. Zadanie 2 Włącz logowanie zapytań SQL. Sprawdź, jakie zapytania są wysyłane do bazy przy wyświetlaniu listy książek. Sprawdź, co się zmieni, jeśli zamiast zapytania: SELECT b FROM Ksiazka b użyjemy zapytania: SELECT b, w FROM Ksiazka b JOIN b.wydawnictwo w Sprawdź, co się zmieni, jeśli zmienimy mapowanie w relacji pomiędzy encjami Ksiazka i Wydawnictwo włączymy parametr fetch=eager. Strona 5 z 5