ORM ou Object Relational Mapping é a design pattern maravilhosa para se trabalhar com bancos de dados relacionais como é o MySql, por exemplo.
A real vantagem do Doctrine ORM é que ele cria uma cópia do seu banco de dados em forma de objetos, cada tabela tem a sua própria classe PHP e cada campo é uma variável. Esse conceito é chamado de entidade, ou seja, cada objeto (classe) é uma entidade do Doctrine ORM que pode ser usada para gerar o seu banco de dados completo, O Doctrine ORM dispensa o uso de classes para disponibilizar o banco de dados, ele é o model e o migration da sua aplicação.
Olhando por outro angulo, cada entidade é também um registro no banco, cada vez que criamos um novo objeto e preenchemos seus atributos (variáveis) com dados estamos na verdade trabalhando com um registro no banco de dado, na sequência apenas dizemos ao Doctrine para realizar a ação final (rodar o comando SQL), esta tarefa é o flush.
Gostou deste artigo?
Receba atualizações semanais com novos artigos do WebDevBr e outras dicas!
Essa integração com ORM é perfeita para quem trabalha com Orientação a Objetos, você trata o banco como objeto PHP, não precisa se preocupar com nenhuma linha de SQL e se você perder o caminho, um simples var_dump te ajuda, afinal é tudo PHP, né?
Baixando o Doctrine ORM
De primeira já digo, vamos usar o Composer, então se você não sabe usar, visite este link primeiro.
A linha pra baixar o Doctrine ORM é:
"doctrine/orm": "2.4.*"
Vou também alterar o local dos comando de console (config) pra ficar fácil mais pra frente e setar o diretório do projeto (autoload), nosso composer.json completo fica assim:
{
"require": {
"doctrine/orm": "2.4.*"
},
"autoload": {
"psr-0": {
"WebDevBr": "src"
}
},
"config": {
"bin-dir": "./bin"
}
}
Depois que você rodar o Composer e instalar tudo, precisamos configurar nossa conexão com o banco e o "console" (muito, muito, muito * 3 útil).
Conectando ao banco de dados
Pra conectar ao banco de dados precisamos passar dois parâmetros, um "isDevMode" que informa se estamos em modo de desenvolvimento ou não e um array com os dados de conexão. Também precisamos configurar o nosso entity manager, ou gerenciador de entidades, pra isso precisamos apenas dizer aonde nossas entidades estão.
Veja como fica nosso arquivo de configuração do Doctrine:
<?php
// bootstrap.php
require_once "vendor/autoload.php";
use Doctrine\ORM\Tools\Setup;
use Doctrine\ORM\EntityManager;
// Diretório aonde vou guardar as entidades
$paths = array("./src/App/Entities");
$isDevMode = false;
// Dados da conexão
$dbParams = array(
'driver' => 'pdo_mysql',
'user' => 'root',
'password' => '',
'dbname' => 'foo',
);
$config = Setup::createAnnotationMetadataConfiguration($paths, $isDevMode);
$entityManager = EntityManager::create($dbParams, $config);
Veja que temos a variável $entityManager no final, ela vai ser responsável por fazer todos os tramites entre o PHP OOP e o MySql, em outras palavras ela vai ser responsável por inerir, cadastrar, requisitar e deletar dados do banco. Vou nomear este arquivo de bootstrap.php
Configurando o console
Agora que já temos nosso Doctrine configurado vou passar estes dados para o "console", pra isso criamos um novo arquivo chamado cli-config.php
<?php
use Doctrine\ORM\Tools\Console\ConsoleRunner;
// Aqui é carrego o arquivo que criamos antes
require_once 'bootstrap.php';
return ConsoleRunner::createHelperSet($entityManager);
Facilitando ainda mais
Fácil né, são poucas linhas de código, mas mesmo assim ainda posso simplificar mais, então eu criei um package com estas configurações prontas e que já instala o Doctrine ORM também, assim fica mais fácil.
Pra instalar chame esta linha no require do Composer ao invés da do Doctrine:
"webdevbr/doctrine": "1.0.0"
E o composer.json ficaria:
{
"require": {
"webdevbr/doctrine": "1.0.0"
},
"autoload": {
"psr-0": {
"WebDevBr": "src"
}
},
"config": {
"bin-dir": "./bin"
}
}
Pra usar é simples, o bootstrap.php ficaria assim:
<?php
require 'vendor/autoload.php';
$isDevMode = true;
$conn = array(
'driver' => 'pdo_mysql',
'user'=>'root',
'password'=>'',
'dbname'=>'foo'
);
$doctrine = new WebDevBr\Doctrine\Doctrine($conn, $isDevMode);
$doctrine->setEntitiesDir('./src/App/Entities');
$entityManager = $doctrine->getEntityManager();
E agora você só configura o cli-config.php (se quiser copiar de vendor/WebDevBr/Doctrine/cli-config.php).
<?php
require_once 'bootstrap.php';
use Doctrine\ORM\Tools\Console\ConsoleRunner;
return ConsoleRunner::createHelperSet($entityManager);
Very ease, né. No próximo artigo vamos criar uma entidade e criar a tabela no banco sem usar nenhuma outra ferramenta (de banco de dados), só o Doctrine ORM, você pode usar qualquer um dos dois métodos de instalação, o importante é você ter o Entity Manager disponível e o cli-config.php configurado corretamente.
Att. Erik