-
-
Save tawfekov/4079388 to your computer and use it in GitHub Desktop.
<?php | |
include '../vendor/autoload.php'; | |
$classLoader = new \Doctrine\Common\ClassLoader('Entities', __DIR__); | |
$classLoader->register(); | |
$classLoader = new \Doctrine\Common\ClassLoader('Proxies', __DIR__); | |
$classLoader->register(); | |
// config | |
$config = new \Doctrine\ORM\Configuration(); | |
$config->setMetadataDriverImpl($config->newDefaultAnnotationDriver(__DIR__ . '/Entities')); | |
$config->setMetadataCacheImpl(new \Doctrine\Common\Cache\ArrayCache); | |
$config->setProxyDir(__DIR__ . '/Proxies'); | |
$config->setProxyNamespace('Proxies'); | |
$connectionParams = array( | |
'driver' => 'pdo_mysql', | |
'host' => 'localhost', | |
'port' => '3306', | |
'user' => 'root', | |
'password' => 'root', | |
'dbname' => 'dbname', | |
'charset' => 'utf8', | |
); | |
$em = \Doctrine\ORM\EntityManager::create($connectionParams, $config); | |
// custom datatypes (not mapped for reverse engineering) | |
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('set', 'string'); | |
$em->getConnection()->getDatabasePlatform()->registerDoctrineTypeMapping('enum', 'string'); | |
// fetch metadata | |
$driver = new \Doctrine\ORM\Mapping\Driver\DatabaseDriver( | |
$em->getConnection()->getSchemaManager() | |
); | |
$em->getConfiguration()->setMetadataDriverImpl($driver); | |
$cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory($em); | |
$cmf->setEntityManager($em); | |
$classes = $driver->getAllClassNames(); | |
$metadata = $cmf->getAllMetadata(); | |
$generator = new Doctrine\ORM\Tools\EntityGenerator(); | |
$generator->setUpdateEntityIfExists(true); | |
$generator->setGenerateStubMethods(true); | |
$generator->setGenerateAnnotations(true); | |
$generator->generate($metadata, __DIR__ . '/Entities'); | |
print 'Done!'; |
Beautiful, saved me a ton of effort
namespaced using
// fetch metadata
$driver = new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
);
$driver->setNamespace('App\Model\Entity');
$em->getConfiguration()->setMetadataDriverImpl($driver);
Saved me a ton of effort as well! Why is this feature buried so far inside the workings of Doctrine?
this is awesome, i have wasted hours to do this ! Thank you very much !!!
I'm happy to see this gist being used till today , it's ~ 5 years old :)
Thank you, very helpfull.
Thanks all tutorial I've found were for Symfony
This is awesome, thanks man.
For Symfony 4 generate entities + repository classes from existing database, same as you'd get using the make:entity command, I modified your gist slightly:
https://gist.github.com/dwgebler/4be59b84a5a4dd5bd6b90ad0efb22a35
Thanks btw, just saved me a ton of work manually mapping my existing database from a Silex project using DBAL to Symfony 4 w/ Doctrine ORM :)
Hello dwgebler,
I search a system to import a existing database for a while so thanks for your job.
But i'm a beginner and i don't know where i have to put this .php file ?
Somebody can help me please ?
Thanks.
Sorry for my english, i'm french.
Thanks man, very cool tool!
Specific tables entity generation (not all tables, only specified):
// fetch metadata
$driver = new \Doctrine\ORM\Mapping\Driver\DatabaseDriver(
$em->getConnection()->getSchemaManager()
);
$specificTables = [
$em->getConnection()->getSchemaManager()->listTableDetails('table_one'),
$em->getConnection()->getSchemaManager()->listTableDetails('table_two')
];
$driver->setTables($specificTables, []);
$em->getConfiguration()->setMetadataDriverImpl($driver);
Thanks, this help a lot, and really really thanks to @MP92 you actually save my day.
Fatal error: Uncaught Doctrine\ORM\Mapping\MappingException: Table _article_recipe has no primary key. Doctrine does not support reverse engineering from tables that don't have a primary key. in E:_test\doctrine\vendor\doctrine\orm\lib\Doctrine\ORM\Mapping\Driver\DatabaseDriver.php:288
awesome,
you save the day
👍
Thanks. 👍
Thank you
Thank you!
I implement it to Symfony command and Doctrine Composer package here: https://github.com/baraja-core/doctrine/blob/master/src/Orm/DatabaseToDoctrineEntityExtractorCommand.php
@janbarasek Thank you for your improvements
@janbarasek Thanks for sharing.It's awesome for my project.
Its interesting that code generation got deprecated and to be removed in version 3.
Via EntityGenerator as in example above or through cli.
I wonder how would one get started with preexisting databases then (after v3 is stable)? probably just writing from scratch which seems pita.
see notes here: https://github.com/doctrine/orm/blob/3.0.x/UPGRADE.md
Deprecated code generators and related console commands
These console commands have been deprecated:
orm:convert-mapping
orm:generate:entities
orm:generate-repositories
These classes have been deprecated:
Doctrine\ORM\Tools\EntityGenerator
Doctrine\ORM\Tools\EntityRepositoryGenerator
Whole Doctrine\ORM\Tools\Export namespace with all its members have been deprecated as well.
Thank you so much. This simple script saved my day and a lot of time. 😄 👍