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↳MySQL8 conteúdosMySQL + Adminer + Docker Compose: montando rapidamente um ambiente para usoData · abr 2019Banco de dados MYSQL no PHPStormDev (Back & Front) · jul 2019Criando um ambiente de desenvolvimento PHP mínimo com Docker – Parte 3Dev (Back & Front) · out 2019Ver tudo em Data → Workbench.
Agora, vem o código e exportação do mapeamento para classes PHP↳PHP44 conteúdosPadronizando seu código com PHP CS FixerDev (Back & Front) · mai 2019Docker de imagem. Para rodar projetos PHP em menos de 30 segundosDev (Back & Front) · jan 2026PHP 7.3: conheça as novidades desta versãoDev (Back & Front) · abr 2019Ver tudo em Dev (Back & Front) →. 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!









