Projeto PHP OO e engenharia reversa com Doctrine
Sabe aquele tempo que você perdia criando as entidades, uma por uma? Pois bem, seus problemas acabaram!
Sabe aquele tempo que você perdia criando as entidades, uma por uma? Pois bem, seus problemas acabaram! Brincadeira à parte, vamos a um exemplo simples de exportação de um mapeamento na base de dados e transformar em entidades. Talvez haja a necessidade, para adaptar às nossas necessidades, de modificar coisas pontuais nas annotations criadas.
Abaixo, temos nosso modelo de exemplo, uma entidade Usuário e seus endereços. Para modos de curiosidade, modelei usando o Mysql Workbench.
Agora, vem o código e exportação do mapeamento para classes PHP. Vejamos o código abaixo, devidamente comentado:
<?php
//Importar o autoload
require_once "vendor/autoload.php";
use Doctrine\ORM\Tools\DisconnectedClassMetadataFactory;
use Doctrine\ORM\Tools\Export\ClassMetadataExporter;
use Doctrine\ORM\Tools\EntityGenerator;
use Doctrine\ORM\Mapping\Driver\DatabaseDriver;
//Setando a pasta onde ficará o código fonte de nossa aplicação
$config = \Doctrine\ORM\Tools\Setup::createAnnotationMetadataConfiguration(array(__DIR__."/src"), true);
//Dados do Banco de dados
$connection = array(
'dbname' => 'imasters',
'user' => 'root',
'password' => 'root',
'host' => '127.0.0.1',
'driver' => 'pdo_mysql',
);
//Criando o EntityManager (Gerenciador de entidade)
$entityManager = \Doctrine\ORM\EntityManager::create($connection, $config);
//Lendo o banco de dados, criando o driver
$driver = new DatabaseDriver($entityManager->getConnection()->getSchemaManager());
//Setando o Namespace ao driver
$driver->setNamespace('App\\Entity\\');
$entityManager->getConfiguration()->setMetadataDriverImpl($driver);
//Preparando para realizar o mapeamento
$classMetaData = new DisconnectedClassMetadataFactory();
$classMetaData->setEntityManager($entityManager);
$metadata = $classMetaData->getAllMetadata();
//Criamos o exporter, informando que a classe exportada conterá annotations, poderia ser XML, YAML, YML ou PHP
// E setamos a pasta do nosso projeto onde ficarão as entidades conforme o NameSpace que setamos anteriormente
$exporter = (new ClassMetadataExporter())->getExporter('annotation', 'src/');
//Criamos o gerador de entidades colocando-o no exporter, jutamento com os metadados vindos do mapeamento.
$exporter->setEntityGenerator(new EntityGenerator());
$exporter->setMetadata($metadata);
//Exportamos!
$exporter->export();
Vamos executar este arquivo. Pode ser no browser ou utilizando o terminal, na pasta do projeto escrevendo “php export.php”. Após a execução, caso não haja problemas com permissão de pasta, nossas entidades estão lá, veja:
Grande abraço e até a próxima!










