Est-il possible de générer des entités Doctrine 2, avec les annotations docblock pertinentes, à partir d'un schéma de base de données existant?Générer des entités doctrine2 annotées à partir du schéma db
Répondre
je devais fait ces changements pour le code ci-dessus pour travailler ..
<?php
use Doctrine\ORM\Tools\EntityGenerator;
ini_set("display_errors", "On");
$libPath = __DIR__; // Set this to where you have doctrine2 installed
// autoloaders
require_once $libPath . '/Doctrine/Common/ClassLoader.php';
$classLoader = new \Doctrine\Common\ClassLoader('Doctrine', $libPath);
$classLoader->register();
$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(
'path' => 'test.sqlite3',
'driver' => 'pdo_sqlite',
);
$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 EntityGenerator();
$generator->setUpdateEntityIfExists(true);
$generator->setGenerateStubMethods(true);
$generator->setGenerateAnnotations(true);
$generator->generate($metadata, __DIR__ . '/Entities');
print 'Done!';
?>
et configuration de connexion mysql comme:
$connectionParams = array(
'driver' => 'pdo_mysql',
'host' => 'localhost',
'port' => '3306',
'user' => 'root',
'password' => 'root',
'dbname' => 'database',
'charset' => 'utf8',
);
Merci! Cela a réellement fonctionné. (Pas comme le programme inclus avec la doctrine). - Bien que je n'ai utilisé votre code que sous $ connectionParams parce que je ne suis pas sûr de la configuration de votre environnement. Par exemple, la fonction 'register();' est clairement indéfinie. Big +1 de toute façon! – vbence
Cela fonctionne très bien pour moi ... Un gros +1 pour vous. Pour les autres qui ont le même problème s'il vous plaît utiliser cette réponse, tous les autres ne fonctionneront pas ... – Tareq
@dminer: Votre script a fonctionné avec succès et a sauvé beaucoup de temps à moi comme je suis nouveau bie à Doctrine. Ce script a créé l'entité à partir de la base de données avec la méthode setter et getter excluant les opérations CRUD. Que faire ensuite si je veux ajouter toutes les opérations de base de CRUD dans cette entité. Veuillez noter que mon projet n'est pas un projet symphonique mais un projet de base simple. – neeraj
Oui, bien que les types de données SGBDR ne soient pas entièrement pris en charge, vous devrez peut-être jouer un peu avec votre code avant de l'utiliser dans votre projet. Ce n'est pas simple comme Doctrine 1.x l'habitude d'être mais encore assez facile. Voici quelques exemples de code, je me suis utilisé (créer des dossiers correctement avant de l'utiliser)
use Doctrine\ORM\Tools\EntityGenerator; ini_set("display_errors", "On"); $libPath = __DIR__ . '/../lib/doctrine2'; // autoloaders require_once $libPath . '/Doctrine/Common/ClassLoader.php'; $classLoader = new \Doctrine\Common\ClassLoader('Doctrine', $libPath); $classLoader->register(); $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( 'dbname' => 'xx', 'user' => 'root', 'password' => '', 'host' => 'localhost', 'driver' => 'pdo_mysql', ); $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() ); $classes = $driver->getAllClassNames(); foreach ($classes as $class) { //any unsupported table/schema could be handled here to exclude some classes if (true) { $metadata[] = $cmf->getMetadataFor($class); } } $em->getConfiguration()->setMetadataDriverImpl($driver); $cmf = new \Doctrine\ORM\Tools\DisconnectedClassMetadataFactory($em); $generator = new EntityGenerator(); $generator->setUpdateEntityIfExists(true); $generator->setGenerateStubMethods(true); $generator->setGenerateAnnotations(true); $generator->generate($metadata, __DIR__ . '/Entities'); print 'Done!';
J'ai mis en place une nouvelle commande pour atteindre cet https://github.com/umpirsky/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesDbCommand.php
Ajoutez juste comme ceci:
$cli->addCommands(array(
// DBAL Commands
new \Doctrine\DBAL\Tools\Console\Command\RunSqlCommand(),
new \Doctrine\DBAL\Tools\Console\Command\ImportCommand(),
// ORM Commands
new \Doctrine\ORM\Tools\Console\Command\ClearCache\MetadataCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\ResultCommand(),
new \Doctrine\ORM\Tools\Console\Command\ClearCache\QueryCommand(),
new \Doctrine\ORM\Tools\Console\Command\SchemaTool\CreateCommand(),
new \Doctrine\ORM\Tools\Console\Command\SchemaTool\UpdateCommand(),
new \Doctrine\ORM\Tools\Console\Command\SchemaTool\DropCommand(),
new \Doctrine\ORM\Tools\Console\Command\EnsureProductionSettingsCommand(),
new \Doctrine\ORM\Tools\Console\Command\ConvertDoctrine1SchemaCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateRepositoriesCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateEntitiesDbCommand(),
new \Doctrine\ORM\Tools\Console\Command\GenerateProxiesCommand(),
new \Doctrine\ORM\Tools\Console\Command\ConvertMappingCommand(),
new \Doctrine\ORM\Tools\Console\Command\RunDqlCommand(),
new \Doctrine\ORM\Tools\Console\Command\ValidateSchemaCommand(),
)) ; $ cli-> run();
Au https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php, générant des entités est déjà pris en charge par le défaut de Doctrine CLI
- 1. Générer des modèles dans doctrine2
- 2. Générer automatiquement des entités Hibernate
- 3. Python ORM qui crée automatiquement des classes à partir du schéma DB
- 4. Automatiser SQL Server DB schéma Schéma Génération
- 5. Tout cadre peut générer des formes à partir du schéma de base de données?
- 6. Outil C++ pour générer des fichiers XML aléatoires à partir du schéma XML?
- 7. Tâche Ant pour générer un diagramme ER à partir de classes annotées JPA/Hibernate
- 8. Quels sont les outils Java les plus rapides pour générer des écrans CRUD à partir d'un schéma DB?
- 9. Construction d'un schéma DB à partir d'Entity Framework Modèle
- 10. entités NHibernate avec des tables db complexes
- 11. Reverse engineering DDL à partir des entités JPA
- 12. générer une clé de formulaire à partir d'un schéma XML
- 13. Matérialisation des entités à partir de SqlDataReader
- 14. ZF, Comment générer des entités avec Doctrine 2
- 15. Comment générer du code Pascal à partir d'un schéma XML dans Delphi Prism?
- 16. Le schéma Db est terminé, Entity Framework peut-il générer un schéma de stockage?
- 17. Existe-t-il un outil pour générer un schéma de base de données à partir du schéma XML?
- 18. Comment générer un modèle de données à partir du schéma sql dans Django?
- 19. comparaison de schéma db
- 20. générer tableview à partir du fichier plist
- 21. Comment générer des fichiers de classe Objective C à partir d'un schéma XML?
- 22. Générer DropDownList à partir du code derrière
- 23. Générer des WebServices Apache AXIS2 à partir d'un schéma (my) SQL?
- 24. Générer des classes ruby à partir du document json
- 25. Comment générer des fichiers GIR à partir du compilateur Vala?
- 26. générer html à partir du code derrière
- 27. Générer javadoc directement à partir du référentiel?
- 28. générer viewmodel à partir du modèle?
- 29. Comment puis-je créer un ddl pour mes entités jpa à partir du code java?
- 30. Java: Annotations annotées (et des valeurs passant)
Envisagez de ne pas le faire. Vous allez créer de meilleures entités si vous les créez à partir de zéro spécifiquement pour votre application. Mappez-les avec des annotations plus tard. – rojoca