Pobierz prezentację
Pobieranie prezentacji. Proszę czekać
1
Object-Relational Mapper for PHP
IStorable Object-Relational Mapper for PHP
2
Plan prezentacji Strukturalne podejście do zapisywania bytów w relacyjnej bazie danych Podejście obiektowe Projekt IStorable Klasa IStorableImplBase Zapisywanie Odczytywanie I wiele innych sprytnych rzeczy Copyright © Rafal Skoczylas
3
Tradycyjne podejście Byty odseparowane od sposobu ich zapisywania przechowywania Ręczne zapisywanie bytów oraz powiązań między nimi Ręczne odczytywanie z bazy i mapowanie na byty Copyright © Rafal Skoczylas
4
Książka adresowa class Address { public $id; public $street;
public $city; } class Person public $name; public $age; public $address; Copyright © Rafal Skoczylas
5
Tradycyjne zapisywanie
$db = new PDO("sqlite://plik.db"); $p = new Person(); $p->address = new Address(); $db->query("insert into Address(street, city) values('".$p->address->street."', '".$p->address->city."')"); $db->query("insert into Person(name, age, address) values('".$p->name."', '".$p->age."', $db->lastInsertId)"); Copyright © Rafal Skoczylas
6
IStorableImplBase class Address extends IStorableImplBase {
public $street; public $city; } class Person extends IStorableImplBase public $name; public $age; public $address; Copyright © Rafal Skoczylas
7
Zapisywanie z IStorable
$db = new PDO("sqlite://plik.db"); $p = new Person($db); $p->address = new Address($db); $p->Store(); Copyright © Rafal Skoczylas
8
Tradycyjne odczytywanie
$a = new Address(); $p = new Person(); $db = new PDO("sqlite://plik.db"); $row = $db->query("select name, age, address from Person where name = 'Smith'")->FetchAll(); $p->name = $row['name']; $p->name = $row['age']; $row = $db->query("select street, city from Address where id = ".$row['address'])->FetchAll(); $a->street = $row['street’]; $a->city = $row['city’]; $p->address = $a; Copyright © Rafal Skoczylas
9
IStorable - Odczytywanie
$db = new PDO("sqlite://plik.db"); $p = IStorableLoader::Load('Person', 'name', 'Smith'); Copyright © Rafal Skoczylas
10
Kontrola zawartości zmiennych
Run-time content checking class Person { public ^[a-zA-Z0-9]+$ */ $name; } Run-time type checking public Address */ $obiekt_typu_Address; public Address */ $obiekt_typu_Address_lub_null; public Address */ $tablica_Addressow; public Address */ $tablica_Addressow_lub_null; Copyright © Rafal Skoczylas
11
Jeszcze więcej… Kaskadowe usuwanie obiektów class Person {
Address */ $address; } $p = new Person($db); $p->address = new Address($db); $p->Store(); $p->Delete(); /* usuwa również $p->address */ Copyright © Rafal Skoczylas
12
Lazy loading class Person {
public ^[a-zA-Z0-9]+$ */ $name; public Address */ $address; } $p = IStorableLoader::Load('Person', 'id', 21); /* $p->address nie jest od razu ładowane z bazy; dopiero podczas pierwszego użycia: */ echo $p->address->$street; Copyright © Rafal Skoczylas
13
Oraz kilka innych $p->CreateTables() – na podstawie definicji klasy, tworzy odpowiedni schemat bazy danych, tak aby można było zapisać obiekt $p i kilka innych ciekawych rzeczy Klasa dostępna jest pod adresem Dokumentacja i większe możliwości wkrótce ;-) Copyright © Rafal Skoczylas
14
Dziękuję
Podobne prezentacje
© 2024 SlidePlayer.pl Inc.
All rights reserved.