Professional Documents
Culture Documents
Fala galera, estou a um tempinho sem escrever nada, vida corrida, faculdade e tudo mais, porm
trago a vocs 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 vrios projetos para se trabalhar especificamente com banco de dados, sejam ele relacionais
como o MySQL e PostgreSQL ou no relacionais como o MongoDB.
A grande vantagem de se usar suas bibliotecas o ganho de abstrao, 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 no
precisar escrever diretamente nenhum comando SQL.
alm de ser um projeto mais antigo que o prprio Laravel, e com uma gama muito maior de projetos
que outilizam, abaixo eu listo algumas poucas vantagens que eu identifiquei no Doctrine ORM
especificamente:
1. Suporte a um nmero maior de banco de dados relacionais e no relacionais
2. Possibilita tornar um banco relacional, um banco orientado a objetos
3. Cria uma portabilidade da estrutura do seu banco de dados atravs do mapeamento de
classes
4. Maior gama de projetos que o utilizam, exemplo: Symfony
Integrando no Laravel
Obs.: No estarei aqui mostrando inicialmente grandes detalhes de como utilizar o Doctrine, mas
para os interessados existe um tutorial no site do projeto disponvel neste link (http://docs.doctrineproject.org/en/latest/#getting-started).
Mos na massa
Como de praxe vamos criar um novo projeto usando o composer, considerarei que voc j o possui
instalado, caso no, sugiro ver esse post (http://blog.butecopensource.org/controle-de-dependenciaem-php-usando-o-composer/), aps tudo instalado, execute o seguinte comando:
composercreateprojectlaravel/laravelpreferdisttutorialdoctrine
Isto criar uma pasta chamada tutorial-doctrine, far o download do Laravel e far a instalao de
suas dependncias.
A seguir precisaremos adicionar a dependncia do Doctrine ORM, para isso execute o comando
abaixo no terminal, na pasta que acabou de ser criada.
composerrequiredoctrine\orm~2.5
Aps o termino da instalao, crie um arquivo chamado cli-config.php na pasta raiz do projeto. Esse
arquivo basicamente far a configurao e possibilitar o acesso via console das funcionalidades do
Doctrine. Depois disso copie o cdigo abaixo para o arquivo:
1
2
3
4
5
6
7
8
9
10
11
<?php
require'vendor\autoload.php';
require__DIR__.'/bootstrap/app.php';
$provider=newApp\Providers\DoctrineServiceProvider($app);
$entityManager=$provider>getEntityManager();
return\Doctrine\ORM\Tools\Console\ConsoleRunner::createHelperSet($entityManager);
cliconfig.php
viewraw(https://gist.github.com/jaschweder/929ee31d0e88d439580b/raw/cliconfig.php)
(https://gist.github.com/jaschweder/929ee31d0e88d439580b#filecliconfigphp)hostedwith byGitHub
(https://github.com)
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.
phpartisanmake:providerDoctrineServiceProvider
Isto criar um novo arquivo em app/Providers, agora copie o cdigo abaixo para o arquivo.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
<?phpnamespaceApp\Providers;
useIlluminate\Support\ServiceProvider;
useDoctrine\ORM\Tools\Setup;
useDoctrine\ORM\EntityManager;
classDoctrineServiceProviderextendsServiceProvider{
private$entityManager;
publicfunctiongetEntityManager()
{
//Caminhoparaapastademodels/entities,estpastanoexistenainstalaodoLara
$path=array(__DIR__."/../Models");
//Verificaseaaplicaoestcomd
$debug=isset($_ENV['APP_DEBUG'])?$_ENV['APP_DEBUG']:true;
//Arraycomasconfiguraesdebancodedados
$database_array=require__DIR__.'/../../config/database.php';
//Arraycomaconfiguraodeconexocomobancodedados
$database_connection=$database_array['connections'][$database_array['default']];
//MtododoDoctrineusadoparaconfigurar
$config=Setup::createAnnotationMetadataConfiguration($path,$debug);
//RetornaumainstnciadoEntityManager
returnEntityManager::create($database_connection,$config);
/**
*Bootstraptheapplicationservices.
*
*@returnvoid
*/
publicfunctionboot()
{
$this>entityManager=self::getEntityManager();
}
/**
*Registertheapplicationservices.
*
*@returnvoid
*/
publicfunctionregister()
{
$this>app>singleton('Doctrine\ORM\EntityManagerInterface',function($app){
return$this>entityManager;
});
}
viewraw(https://gist.github.com/jaschweder/feae805d6c46de15adf3/raw/DoctrineServiceProvider.php)
DoctrineServiceProvider.php(https://gist.github.com/jaschweder/feae805d6c46de15adf3#file
doctrineserviceproviderphp)hostedwith
byGitHub(https://github.com)
Obs.: O cdigo est comentado e caso necessitem tirar alguma dvida, por favor escrevam nos
comentrios estarei atendendo o quanto antes for possvel.
Agora para testarmos vamos alterar o arquivo de configurao de conexo com banco de dados do
Laravel em config\database.php. Basicamente precisamos alterar duas coisas: mudar o valor da
posio default para sqlite e alterar o driver da posio sqlite na lista de conexes 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.
touchstorage/database.sqlite
Finalmente vamos rodar um comando do Doctrine para verificar se est tudo certo.
vendor\bin\doctrineorm:validateschema
Caso esteja tudo certo ser impresso no terminal uma mensagem dizendo que est tudo OK.
Bem pessoal, essa foi um introduo da integrao do Doctrine com o Laravel 5, aguardem os
prximos posts, segam-nos nas redes e at a prxima \o.
doctrine (http://blog.butecopensource.org/tag/doctrine/)
doctrine orm (http://blog.butecopensource.org/tag/doctrine-orm/)
Framework (http://blog.butecopensource.org/tag/framework/)
integrao (http://blog.butecopensource.org/tag/integracao/)
Laravel (http://blog.butecopensource.org/tag/laravel/)
5Comentrios
ButecoOpenSource
Compartilhar
Recommend
PHP (http://blog.butecopensource.org/tag/php/)
OrdenarporMelhoravaliado
Participedadiscusso...
ClientesClientes 7diasatrs
BoaTarde!timoPOST.
Umapergunta,possveltrabalharcomMultitenancySeparadoporbancocomDoctrine?
Casoafirmativo,voctemalgumartigosobreisso?
Obrigado
Responder Compartilhar
Entrar
JosBernardes 10diasatrs
Estouestudandoporcontaprpriabancodedadoseacheibeminteressanteamatria.
Estouacompanhando.
Valeu!!
Responder Compartilhar
MarceloWanderley 10diasatrs
AcheibeminteressanteoPOST.
Eutenhoumadvida.
Existeapossibilidadedeinserirdadosdeumasvezcontendorelacionamentoemumnico
objeto?
Algodestetipo.
Responder Compartilhar
JonathanAndrSchweder>MarceloWanderley 10diasatrs
Sim,porexemplo,$cidadee$estado,$cidadeteriaumatributochamado'estado',comos
devidosmtodosgeteset,nessecasovocfariaalgocomo:
$estadoRepository=$entityManager>getRepository('Estado')
$cidadeRepository=$entityManager>getRepository('Cidade')
$estado=$estadoRepository>find(1)//retornaoestadocom'id'=1
$cidade>setEstado($estado)//setaoestadonacidade
$cidadeRepository>save($cidade)//salvaemmemriaoobjeto
$entityManager>flush()//enviaasalteraesparaobanco(obrigatrio)
realmenteesseprimeiropostfoimaisparaconfiguraes,mostrareimaisdissonos
prximos,emresumo,nocdigousandoapenasoORM,vocsemprevaitrabalharapenas
comobjetos.
Responder Compartilhar
MarceloWanderley>JonathanAndrSchweder 10diasatrs
Legal.
Eseforassimcomoexemplo.
Umquestionriotemvariasperguntasecadaperguntatemvriosopesdo
tipo(radiobutton)..
Assimtambmtemcomoregistrarutilizandoumnicoobjeto?
NesteexemplotemosumarelaoOneToManyeManyToMany
Responder Compartilhar
TAMBMEMBUTECOOPENSOURCE
Laravel5docomeoaofim[parte3]
OQUEISSO?
UsandoaAPIdoGoogleAnalyticsno
Python
17comentrios3mesesatrs
VagnerLuzDoCarmoDequalquerforma,
sumadica,masoLaravelprocuraosnomes
emminsculoenopluralemingls(por
Construindoainterfacedelogindospotify
comPyGTKeCSS
4comentrios2mesesatrs
2comentrios2mesesatrs
SilasVasconcelosShowdebolacolega,
estareitestandohojemesmo!
CriandomduloPythonemC/C
1comentrio2mesesatrs
MarcosUmaboapedida,quesimplificabem
GermanoCorraMuitoobrigadoPedro!
Valeumesmo:D
oprocessoutilizarBoost.Python,pormos
temposdebuildaumentambastante,
Pesquisar...
SORTEIO
Participe (//blog.butecopensource.org/sorteio-de-um-ebook-da-casa-do-codigo/)
REDES SOCIAIS
Curtir
Compartilhar
522
Follow@ButecoOpenSource
Seguir
Seguir
153
284seguidores
CATEGORIAS
Selecionar categoria
APOIO
(https://www.pagueveloz.com.br/Origem/blog.butecopensource.org/)
(http://novatec.com.br/?
utm_source=Blog&utm_medium=Banner&utm_campaign=ButecoOpenSource)
(http://www.aliexpress.com/store/product/Newest-Micro-M150-
Banana-Pi-same-as-Raspberry-pi-USB-WIFI-Adapter-for-Banana-Pi-use/302756_2020976445.html)
(http://www.filipeflop.com/?
utm_source=Blog&utm_medium=Banner&utm_campaign=ButecoOpenSource)
(http://www.lojamundi.com.br/embarcadosraspberry-cubieboard-beagleboneblack.html/?
utm_source=Blog&utm_medium=Banner&utm_campaign=ButecoOpenSource)
(http://www.rizer.com.br/?
utm_source=Blog&utm_medium=Banner&utm_campaign=ButecoOpenSource)
Anuncie aqui
(http://blog.butecopensource.com/anuncie-conosco/)
PARCEIROS
(http://www.embarcados.com.br/?
utm_source=butecopensource&utm_medium=banner&utm_campaign=Banner%20ButecopenSourc
e)
Seja um parceiro
(http://blog.butecopensource.com/anuncie-conosco/)
SIGA-NOS
(htt
ps://
ww
(htt w.yo
ps:// utub
(htt
plus. e.co
ps://
ww
TAGS
e)
Dw)
ce)
api (http://blog.butecopensource.org/tag/api/)
arduino (http://blog.butecopensource.org/tag/arduino/)
audio (http://blog.butecopensource.org/tag/audio/)
c (http://blog.butecopensource.org/tag/c/)
banana-pi (http://blog.butecopensource.org/tag/banana-pi/)
centos (http://blog.butecopensource.org/tag/centos/)
central-multimidia (http://blog.butecopensource.org/tag/central-multimidia/)
certificao (http://blog.butecopensource.org/tag/certificacao-2/)
desenvolvimento (http://blog.butecopensource.org/tag/desenvolvimento/)
eBook (http://blog.butecopensource.org/tag/ebook/)
email (http://blog.butecopensource.org/tag/email/)
Facebook (http://blog.butecopensource.org/tag/facebook/)
fedora (http://blog.butecopensource.org/tag/fedora/)
ferramenta (http://blog.butecopensource.org/tag/ferramenta/)
firefox (http://blog.butecopensource.org/tag/firefox/)
Framework (http://blog.butecopensource.org/tag/framework/)
games (http://blog.butecopensource.org/tag/games/)
GitHub (http://blog.butecopensource.org/tag/github/)
HTTP (http://blog.butecopensource.org/tag/http/)
gnome (http://blog.butecopensource.org/tag/gnome/)
IoT (http://blog.butecopensource.org/tag/iot/)
javascript (http://blog.butecopensource.org/tag/javascript/)
jquery (http://blog.butecopensource.org/tag/jquery/)
kernel (http://blog.butecopensource.org/tag/kernel/)
Laravel (http://blog.butecopensource.org/tag/laravel/)
linux (http://blog.butecopensource.org/tag/linux/)
jogos (http://blog.butecopensource.org/tag/jogos/)
laravel 5 (http://blog.butecopensource.org/tag/laravel-5/)
livros (http://blog.butecopensource.org/tag/livros/)
mozilla (http://blog.butecopensource.org/tag/mozilla/)
novatec (http://blog.butecopensource.org/tag/novatec/)
openSUSE (http://blog.butecopensource.org/tag/opensuse/)
PHP (http://blog.butecopensource.org/tag/php/)
programao (http://blog.butecopensource.org/tag/programacao/)
python (http://blog.butecopensource.org/tag/python/)
rust (http://blog.butecopensource.org/tag/rust/)
wine (http://blog.butecopensource.org/tag/wine/)
revista (http://blog.butecopensource.org/tag/revista/)
terminal (http://blog.butecopensource.org/tag/terminal/)
testes (http://blog.butecopensource.org/tag/testes/)
video (http://blog.butecopensource.org/tag/video/)
pypy (http://blog.butecopensource.org/tag/pypy/)
tirinha (http://blog.butecopensource.org/tag/tirinha/)
web (http://blog.butecopensource.org/tag/web/)
wordpress (http://blog.butecopensource.org/tag/wordpress/)