Instalando o Doctrine ORM - Como criar um CRUD com PHP Artigo

Conheça os cursos gratuitos do WebDevBr! - Inscreva-se!


Este artigo foi publicado a 2 anos, 9 meses, 2 dias atrás.

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


Cursos relacionados


* Parcelamento apenas cartão de crédito! Pode haver uma pequena variação no parcelamento em relação a simulações apresentadas!