• Like
Doctrine 2
Upcoming SlideShare
Loading in...5
×
Uploaded on

 

More in: Technology
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Be the first to comment
    Be the first to like this
No Downloads

Views

Total Views
161
On Slideshare
0
From Embeds
0
Number of Embeds
0

Actions

Shares
Downloads
1
Comments
0
Likes
0

Embeds 0

No embeds

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
    No notes for slide
  • <номер>

Transcript

  • 1. Doctrine 2 Шатов Максим Разработчик Maxim.Shatov@softline.ru 2013.01.25
  • 2. Doctrine 2 состоит из трех основных библиотек Common общие компоненты, которые используются в других библиотеках/пакетах DBAL слой абстракции от БД ORM инструменты объектно-реляционного отображения
  • 3. Doctrine Common Загрузчик классов основан на широко используемых соглашениях о пространствах имен, имен классов и структуре каталогов Аннотации аннотации в стиле DocBlock к классам PHP Кеширование «из коробки» доступны: ApcCache, ArrayCache, FilesystemCache, FilesystemCache, MemcachedCache, PhpFileCache, RedisCache, WinCacheCache, XcacheCache, ZendDataCache
  • 4. Аннотации namespace Entities; /** * @Entity @Table(name="users") */ class User { /** @Id @Column(type="integer") @GeneratedValue */ private $id; /** @Column(length=50) */ private $name; /** @OneToOne(targetEntity="Address") */ private $address; }
  • 5. Doctrine DBAL Конструктор запросов Управление транзакциями Менеджер схемы БД Менеджер событий Обеспечение безопасности (защита от sql-инъекций) Поддержка различных БД Кеширование
  • 6. Doctrine ORM Позволяет отображать объекты PHP в таблицы базы данных Использование аннотаций, XML или YAML для метаданных Связи между объектами отображаются как внешние ключи Отношение объекта ко многим обрабатывается как коллекция Выборка из базы данных при помощи менеджера объектов, репозитория или запроса любой сложности на языке DQL(Doctrine Query Language)
  • 7. Интерфейс командной строки Создание «геттеров» и «сеттеров» Создание таблиц/схемы для БД Миграции Фикстуры Импорт отображения объектов из существующей базы данных Очистка кеша метаданных/запросов/результатов Выполнение запросов
  • 8. Отображение объектов в базу данных Отображаются Объекты Связи Отношения наследование/суперклассы, переопределение связей/полей Способы задания Аннотации XML YAML PHP
  • 9. Использование суперклассов и подклассов /** @MappedSuperclass */ class MappedSuperclassBase { /** @Column(type="integer") */ private $mapped1; /** @Column(type="string") */ private $mapped2; /** * @OneToOne(targetEntity="SuperclassRelated1") * @JoinColumn(name="related1_id", referencedColumnName="id") */ private $mappedRelated1; // ... more fields and methods }
  • 10. Использование суперклассов и подклассов /** @Entity */ class EntitySubClass extends MappedSuperclassBase { /** @Id @Column(type="integer") */ private $id; /** @Column(type="string") */ private $name; // ... more fields and methods }
  • 11. Наследование с использованием дискриминаторов /** * @Entity * @InheritanceType("SINGLE_TABLE") * @DiscriminatorColumn(name="discr", type="string") * @DiscriminatorMap({"person" = "Person", "employee" = "Employee"}) */ class Person { // ... } /** * @Entity */ class Employee extends Person { // ... }
  • 12. Работа с объектами Базовое Сущности Связи События Запросы DQL Конструктор запросов Нативный SQL Внутренняя структура Отслеживание изменения объектов Несколько слоёв ORM Двунаправленные связи Обновление связанных объектов
  • 13. Вставка записей используя Doctrine for ($i = 0; $i < 20; ++$i) { $user = new User; $user->name = 'Иванов А.Д.'; $em->persist($user); } $s = microtime(true); $em->flush(); $e = microtime(true); echo $e - $s;
  • 14. Вставка записей используя «сырой» код PHP $s = microtime(true); for ($i = 0; $i < 20; ++$i) { mysql_query("INSERT INTO users (name) VALUES ('Иванов А.Д.')"); } $e = microtime(true); echo $e - $s;
  • 15. Сравнение результатов Doctrine 2 0.0094 секунд mysql_query 0.0165 секунд
  • 16. Вставка записей используя «сырой» код PHP v2 $s = microtime(true); mysql_query('START TRANSACTION'); for ($i = 0; $i < 20; ++$i) { mysql_query("INSERT INTO users (name) VALUES ('Иванов А.Д.')"); } mysql_query('COMMIT'); $e = microtime(true); echo $e - $s; 0.0028 секунд
  • 17. Жизненный цикл и обработчики событий preRemove postRemove prePersist postPersist preUpdate postUpdate postLoad loadClassMetadata
  • 18. /** @Entity @HasLifecycleCallbacks */ class User { /** * @Column(type="string", length=255) */ public $value; /** @PrePersist */ public function doStuffOnPrePersist() { $this->value = date('Y-m-d H:m:s'); } /** @PrePersist */ public function doOtherStuffOnPrePersist() { $this->value = 'changed from prePersist callback!'; } /** @PostLoad */ public function doStuffOnPostLoad() { $this->value = 'changed from postLoad callback!'; } }
  • 19. Спасибо за внимание! Вопросы?