doctrine project
DESCRIPTION
Ao contrário do que todo mundo pensa, o Doctrine não é somente um Mapeador de objeto relacional. É um projeto focado em desenvolver soluções para persistência de dados e tecnologias relacionadas. Nessa palestra você verá o uso de várias ferramentas que fazem o uso de pacotes do projeto que serão úteis no seu ambiente desenvolvimento desde a implementação ao deploy.TRANSCRIPT
PHPMGTalks #3 – 13 de Abril de 2013
Eu!
● Daniel Lima– @yourwebmaker– fb.com/dlpinheiro– Arquiteto de aplicações na – Produtor musical & DJ– Biker– Skater– Drunk– ...
Agenda
● O que é o Doctrine na verdade?– O projeto– Libs:
● ORM● ODM: MongoDB, CouchDB● DBAL: Migrations● Common: Annotations, Cache, Data Fixtures, Inflector
● Doctrine e outros projetos
Vamos começar!
O Projeto
● O que é o Doctrine na verdade?– “The Doctrine Project is the home of a selected set
of PHP libraries primarily focused on providing persistence services and related functionality. Its prize projects are a Object Relational Mapper and the Database Abstraction Layer it is built on top of.” - http://www.doctrine-project.org/
Ou seja...
Não é somente um ORM!
Colaboradores
● Guilherme Blanco …. Éééééé do Brasilll!!!!● Jonathan H. Wage● Benjamin Eberlei● Bulat Shakirzyanov● Fabien Potencier● Roman S. Borschel● ….... Você!
Agora, vamos conhecer algumas libraries do
Doctrine!
ORM: Mapeador de Objeto Relacional● É a lib mais conhecida pela comunidade● Facilita o desenvolvimento voltado ao Domínio
(problema) da aplicação● Aproxima o modelo entidade-relacionamento
ao modelo Orientado a Objetos● Não é necessário escrever SQL● Não é esse MONSTRO todo que pensam...● RTFM!!!
ORM: Mapeador de Objeto Relacional
Passo a passo comum:– Crie suas tabelas– Crie suas classes– Mapeie suas classes– Instancie suas classes– Salve seus objetos– Traga seus objetos salvos
Crie suas tabelas no banco de dados
Crie suas classes
Crie suas classes
Mapeie suas classes● Classe “Usuario” mapeada
– https://gist.github.com/yourwebmaker/5369280#file-usuario-php
● Classe “Grupo” mapeada– https://gist.github.com/yourwebmaker/5369280#fil
e-grupo-php
Instancie suas classes
Instancie suas classes
Salve seus objetos
Traga seus objetos salvos
ODM: Mapeador para No-SQL● Mesmo “Conceito” do ORM, mas trabalha
somente com bancos No-Sql● Oferece funcionalidades extras que os Clients
No-Sql não oferecem:– Event Manager– EntityRepositories– Herança
● MongoDB, CouchDB, OrientDB...● O projeto Doctrine\KeyValueStore pretende
padronizar o uso de bancos No-Sql.
DBAL: Data Base Abstraction & Access Layer
● Camada de abstração de banco de dados sobre a PDO
● Oferece funcionalidades extras à PDO● ORM faz uso da DBAL
DBAL: Alguns Recursos extras à PDO● Cache
DBAL: Alguns Recursos extras à PDO● Eventos
DBAL: Alguns Recursos extras à PDO● Tipos
– CREATE DOMAIN MyMoney AS DECIMAL(18,3);– Definindo um tipo:
https://gist.github.com/yourwebmaker/7a61f175c759cf00096d#file-moneytype-php
– Adicionando um tipo:
DBAL: Alguns Recursos extras à PDO● Schema-Manager
DBAL: Alguns Recursos extras à PDO● Schema-Representation
DBAL: Alguns Recursos extras à PDO● Schema-Representation
DBAL: Alguns Recursos extras à PDO● Query Builder
Common\Annotations● /**
* @var * @todo * @Entity(repositoryClass=”XRepository”) * @ORM\Entity * @Assert\NotBlank() */
● "Annotations provide data about a program that is not part of the program itself. They have no direct effect on the operation of the code they annotate." Oracle
● São como arquivos de configuração
Common\Annotations
Common\Cache● ApcCache (requires ext/apc)● ArrayCache (in memory, lifetime of the request)● FilesystemCache (not optimal for high concurrency)● MemcacheCache (requires ext/memcache)● MemcachedCache (requires ext/memcached)● PhpFileCache (not optimal for high concurrency)● RedisCache.php (requires ext/phpredis)● WinCacheCache.php (requires ext/wincache)● XcacheCache.php (requires ext/xcache)● ZendDataCache.php (requires Zend Server Platform)
Common\Cache
Common\DataFixtures
Common\DataFixtures
Common\Inflector
DBAL\Migrations● “The Doctrine Migrations offer additional
functionality on top of the database abstraction layer (DBAL) for versioning your database schema and easily deploying changes to it. It is a very easy to use and powerful tool.”
● Instale na munheca... ou... use o PHAR!● 1000000x.... USE O PHAR!
DBAL\Migrations
DBAL\Migrations● Configuração
– table_name: doctrine_migration_versions
migrations_directory: /path/to/migrations/classes/DoctrineMigrations
migrations:
migration1:
version: 20100704000000
class: DoctrineMigrations\NewMigration
DBAL\Migrations● $ doctrine-migrations:generate
Generated new migration class to "/path/to/migrations/classes/DoctrineMigrations/Version20100416130422.php"
DBAL\Migrations
DBAL\Migrations
DBAL\Migrations$ ./doctrine migrations:status
== Configuration
>> Name: Doctrine Sandbox Migrations
>> Database Driver: pdo_mysql
>> Database Name: testdb
>> Configuration Source: /Users/jwage/Sites/doctrine2git/tools/sandbox/migrations.xml
>> Version Table Name: doctrine_migration_versions
>> Migrations Namespace: DoctrineMigrations
>> Migrations Directory: /Users/jwage/Sites/doctrine2git/tools/sandbox/DoctrineMigrations
>> Current Version: 2010-04-16 13:04:22 (20100416130422)
>> Latest Version: 2010-04-16 13:04:22 (20100416130422)
>> Executed Migrations: 0
>> Available Migrations: 1
>> New Migrations: 1
== Migration Versions
>> 2010-04-16 13:04:01 (20100416130401) not migrated
DBAL\Migrations$ ./doctrine migrations:migrate --dry-run
Are you sure you wish to continue?
y
Executing dry run of migration up to 20100416130452 from 0
>> migrating 20100416130452
-> CREATE TABLE users (username VARCHAR(255) NOT NULL, password VARCHAR(255) NOT NULL) ENGINE = InnoDB
DBAL\Migrations$ ./doctrine migrations:migrate 0
Are you sure you wish to continue?
y
Migrating down to 0 from 20100416130422
-- reverting 20100416130422
-> DROP TABLE addresses
-- reverted
-- reverting 20100416130401
-> DROP TABLE users
-- reverted
Doctrine e outros projetos● Symfony
– Validators
– Router
● Zend Framework 2● Zend Framework 1● JSM\Serializer● DMS\Filter● SuaSempresa\SuaLib
Como obter ajuda?● Google Groups:
– Doctrine-user
– Doctrine-dev
– Doctrine-BR
● IRC– irc.freenode.net/doctrine
– irc.freenode.net/doctrine-dev
– irc.freenode.net/doctrine-mongodb-odm
● LEIA O MANUAL DE CABO A RABO!
Contribuindo com o Doctrine● http://www.doctrine-project.org/contribute.html● https://github.com/doctrine
– Há sempre projetos interessantes lá =)
Reflexões...
Perguntas?
Obrigado!