Você está na página 1de 11
Integrando o Do ctrine ORM e Laravel 5 [parte-1]  28 de maio de 2015

Integrando o Doctrine ORM e Laravel 5 [parte-1]

Fala galera, estou a um tempinho sem escrever nada, vida corrida, faculdade e tudo mais, porém trago a vocês hoje um breve tutorial de como integrar o Doctrine ao Laravel 5, vamos nessa!

O que é o Doctrine ?

Antes de mais nada gostaria de falar um pouco sobre o projeto Doctrine. O Doctrine é um conjunto de vários projetos para se trabalhar especificamente com banco de dados, sejam ele relacionais como o MySQL e PostgreSQL ou não relacionais como o MongoDB.

A grande vantagem de se usar suas bibliotecas é o ganho de abstração, facilmente você pode trocar entre bancos sem problema nenhum, e caso você use o Doctrine ORM, você pode recriar a estrutura do seu banco de dados a partir de suas classes mapeadas, e como de é de se esperar, você não precisará escrever diretamente nenhum comando SQL.

Por que usar o Doctrine no Laravel se já existe o Eloquent ?

Dado uma breve explicação do que é o Doctrine, e caso você já conheça ou trabalhe com o Laravel, provavelmente você vai se perguntar, por que diabos eu usaria o Doctrine se o Laravel vem com o Eloquent por padrão? Bem, para dizer a verdade tudo depende, no meu caso por exemplo um dos maiores motivos de usar o Doctrine inicialmente foi o suporte ao banco de dados Sybase, contudo, e com o tempo, percebi que o Doctrine estava muito mais avançado do que o Eloquent, o que não é de se estranhar já que o Doctrine é um conjunto de bibliotecas dedicadas para um único propósito,

além de ser um projeto mais antigo que o próprio Laravel, e com uma gama muito maior de projetos que o utilizam, abaixo eu listo algumas poucas vantagens que eu identifiquei no Doctrine ORM especificamente:

1. Suporte a um número maior de banco de dados relacionais e não relacionais

2. Possibilita tornar um banco relacional, um banco orientado a objetos

3. Cria uma portabilidade da estrutura do seu banco de dados através do mapeamento de classes

4. Maior gama de projetos que o utilizam, exemplo: Symfony

Integrando no Laravel

Obs.: Não estarei aqui mostrando inicialmente grandes detalhes de como utilizar o Doctrine, mas para os interessados existe um tutorial no site do projeto disponível neste link (http://docs.doctrine- project.org/en/latest/#getting-started).

composer require doctrine\orm ~2.5

Após o termino da instalação, crie um arquivo chamado “cli-config.php” na pasta raiz do projeto. Esse arquivo basicamente fará a configuração e possibilitará o acesso via console das funcionalidades do Doctrine. Depois disso copie o código abaixo para o arquivo:

1

<?php

2

3

require 'vendor\autoload.php';

 

4

 

5

require

DIR

. '/bootstrap/app.php';

6

 

7

$provider = new App\Providers\DoctrineServiceProvider($app);

 

8

 

9

$entityManager = $provider‐>getEntityManager();

 

10

 

11

return \Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);

(https://gist.github.com/jaschweder/929ee31d0e88d439580b#file­cli­config­php) hostedwith by GitHub

Agora precisaremos criar um ServiceProvider, ou uma classe que dará acesso ao EntityManager do Doctrine, para isso execute o comando abaixo na raiz do projeto.

php artisan make:provider DoctrineServiceProvider

Isto criará um novo arquivo em “app/Providers”, agora copie o código abaixo para o arquivo.

1

<?php namespace App\Providers;

 

2

 

3

use Illuminate\Support\ServiceProvider;

 

4

 

5

use Doctrine\ORM\Tools\Setup;

 

6

use Doctrine\ORM\EntityManager;

 

7

 

8

class DoctrineServiceProvider extends ServiceProvider {

 

9

 

10

 

private $entityManager;

 

11

 

12

 

public function getEntityManager()

 

13

{

14

 

//Caminho para a pasta de models/entities, está pasta não existe na instalação

15

$path = array(

DIR

"/

/Models");

 

16

 

17

 

//Verifica se a aplicação está com d

 

18

$debug = isset($_ENV['APP_DEBUG']) ? $_ENV['APP_DEBUG'] : true;

19

 

20

 

//Array com as configurações de banco de dados

 

21

$database_array = require

DIR

.

'/

/

/config/database.php';

22

 

23

 

//Array com a configuração de conexão com o banco de dados

24

$database_connection = $database_array['connections'][$database_array['default'

25

 

26

 

//Método do Doctrine usado para configurar

 

27

$config = Setup::createAnnotationMetadataConfiguration($path, $debug);

28

 

29

 

//Retorna uma instância do EntityManager

 

30

return EntityManager::create($database_connection, $config);

31

 

}

32

 

33

 

/**

34

*

Bootstrap the application services.

 

35

*

36

*

@return void

37

*/

38

public function boot()

 

39

{

40

 

$this‐>entityManager = self::getEntityManager();

41

 

}

42

 

43

 

/**

44

*

Register the application services.

 

45

*

46

*

@return void

47

*/

48

public function register()

 

49

{

50

 

$this‐>app‐>singleton('Doctrine\ORM\EntityManagerInterface', function($app){

51

return $this‐>entityManager;

 

52

});

53

 

}

54

 

55

}

52 }); 53   } 54   55 } viewraw

Obs.: O código está comentado e caso necessitem tirar alguma dúvida, por favor escrevam nos comentários estarei atendendo o quanto antes for possível.

Agora para testarmos vamos alterar o arquivo de configuração de conexão com banco de dados do Laravel em “config\database.php”. Basicamente precisamos alterar duas coisas: mudar o valor da posição “default” para “sqlite” e alterar o driver da posição “sqlite” na lista de conexões de “sqlite” para utilizar o “pdo_sqlite”, que é o driver do Doctrine para se trabalhar com o SQLite.

Por fim apenas execute o comando abaixo para criar o arquivo do banco de dados na pasta “storage”.

touch storage/database.sqlite

Finalmente vamos rodar um comando do Doctrine para verificar se está tudo certo.

vendor\bin\doctrine orm:validate‐schema

Caso esteja tudo certo será impresso no terminal uma mensagem dizendo que está tudo OK.

Bem pessoal, essa foi um introdução da integração do Doctrine com o Laravel 5, aguardem os próximos posts, segam-nos nas redes e até a próxima \o.

5Comentários

ButecoOpenSource

1

Entrar

Recommend

Compartilhar

OrdenarporMelhoravaliado

Participedadiscussão Recommend ⤤ Compartilhar OrdenarporMelhoravaliado ClientesClientes • 7diasatrás BoaTarde!ÓtimoPOST.

Compartilhar OrdenarporMelhoravaliado Participedadiscussão ClientesClientes • 7diasatrás BoaTarde!ÓtimoPOST.

ClientesClientes 7diasatrás ClientesClientes •

BoaTarde!ÓtimoPOST.

Umapergunta,ÉpossíveltrabalharcomMultitenancySeparadoporbancocomDoctrine?

Casoafirmativo,vocêtemalgumartigosobreisso?

Obrigado

Responder Compartilhar›

JoséBernardes 10diasatrás

Estouestudandoporcontaprópriabancodedadoseacheibeminteressanteamatéria.

Estouacompanhando.

Valeu!!

Estouacompanhando. Valeu!! △ ▽ • Responder • Compartilhar›

Responder Compartilhar›

MarceloWanderley 10diasatrás

AcheibeminteressanteoPOST.

Eutenhoumadúvida.

Existeapossibilidadedeinserirdadosdeumasóvezcontendorelacionamentoemumúnico

objeto?

Algodestetipo.

Responder Compartilhar›

Algodestetipo. △ ▽ • Responder • Compartilhar› JonathanAndréSchweder > MarceloWanderley •

JonathanAndréSchweder>MarceloWanderley 10diasatrás

Sim,porexemplo,$cidadee$estado,$cidadeteriaumatributochamado'estado',comos

devidosmétodosgeteset,nessecasovocêfariaalgocomo:

$estadoRepository=$entityManager­>getRepository('Estado');

$cidadeRepository=$entityManager­>getRepository('Cidade');

$estado=$estadoRepository­>find(1);//retornaoestadocom'id'=1

$cidade­>setEstado($estado);//setaoestadonacidade

$cidadeRepository­>save($cidade);//salvaemmemóriaoobjeto

$entityManager­>flush();//enviaasalteraçõesparaobanco(obrigatório)

realmenteesseprimeiropostfoimaisparaconfigurações,mostrareimaisdissonos

próximos,emresumo,nocódigousandoapenasoORM,vocêsemprevaitrabalharapenas

comobjetos.

Responder Compartilhar›

comobjetos. △ ▽ • Responder • Compartilhar› MarceloWanderley > JonathanAndréSchweder •

MarceloWanderley>JonathanAndréSchweder 10diasatrás

Legal.

Eseforassimcomoexemplo.

Umquestionáriotemvariasperguntasecadaperguntatemváriosopçõesdo

tipo(radiobutton)

Assimtambémtemcomoregistrarutilizandoumúnicoobjeto?

NesteexemplotemosumarelaçãoOne­To­ManyeMany­To­Many

Responder Compartilhar›

TAMBÉMEMBUTECOOPENSOURCE

Laravel5docomeçoaofim[parte3]

OQUEÉISSO?

UsandoaAPIdoGoogleAnalyticsno

17comentários3mesesatrás

17comentários • 3mesesatrás VagnerLuzDoCarmo —Dequalquerforma,é sóumadica,masoLaravelprocuraosnomes

VagnerLuzDoCarmo—Dequalquerforma,é

sóumadica,masoLaravelprocuraosnomes

emminúsculoenopluraleminglês(por…

Construindoainterfacedelogindospotify

comPyGTKeCSS

4comentários2mesesatrás

comPyGTKeCSS 4comentários • 2mesesatrás GermanoCorrêa —MuitoobrigadoPedro! Valeumesmo:D Python

GermanoCorrêa—MuitoobrigadoPedro!

Valeumesmo:D

Python

2comentários2mesesatrás

Valeumesmo:D Python 2comentários • 2mesesatrás SilasVasconcelos —Showdebolacolega,

SilasVasconcelos—Showdebolacolega,

estareitestandohojemesmo!

CriandomóduloPythonemC/C

1comentário2mesesatrás

CriandomóduloPythonemC/C 1comentário • 2mesesatrás Marcos —Umaboapedida,quesimplificabem

Marcos—Umaboapedida,quesimplificabem

oprocessoéutilizarBoost.Python,porémos

temposdebuildaumentambastante,é…

Pesquisar  SORTEIO Ganhe um e-Book da Casa do Código

Pesquisar



SORTEIO

Pesquisar  SORTEIO Ganhe um e-Book da Casa do Código Participe

Ganhe um e-Book da Casa do Código

REDES SOCIAIS

Participe (//blog.butecopensource.org/sorteio-de-um-e- book-da-casa-do-codigo/) REDES SOCIAIS Curtir Compartilhar 522
Participe (//blog.butecopensource.org/sorteio-de-um-e- book-da-casa-do-codigo/) REDES SOCIAIS Curtir Compartilhar 522
Participe (//blog.butecopensource.org/sorteio-de-um-e- book-da-casa-do-codigo/) REDES SOCIAIS Curtir Compartilhar 522

Curtir Compartilhar 522

SIGA-NOS

SIGA-NOS

wine (http://blog.butecopensource.org/tag/wine/) web (http://blog.butecopensource.org/tag/web/) wordpress

© Buteco Open Source - 2015