是否可以從現有的數據庫模式生成Doctrine 2實體和相關的docblock註釋?從數據庫模式生成帶註釋的doctrine2 entite
回答
我不得不做出這些變化對上面的代碼工作..
<?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!';
?>
和MySQL連接配置,如:
$connectionParams = array(
'driver' => 'pdo_mysql',
'host' => 'localhost',
'port' => '3306',
'user' => 'root',
'password' => 'root',
'dbname' => 'database',
'charset' => 'utf8',
);
謝謝!這實際上工作。 (不像包含在教條中的程序)。 - 雖然我只使用'$ connectionParams'下的代碼,因爲我對自己的環境設置沒有信心。例如,函數register();顯然是未定義的。反正大+1! – vbence 2011-07-08 10:50:38
這對我來說工作得很好......給你一個大+1。對於其他人誰具有同樣的問題,請使用這個答案,所有其他人都不行... – Tareq 2012-01-28 07:16:19
@dminer:你的腳本運行succeffully並保存大量的礦山時間,我是新來BIE學說。該腳本使用setter和getter方法從數據庫創建實體,但不包括CRUD操作。如果我想在該實體中添加所有基本的CRUD操作,下一步該做什麼。請注意,我的項目不是一個交響樂項目,而是一個簡單的核心項目。 – neeraj 2013-01-03 09:45:37
是的,儘管RDBMS數據類型沒有完全支持,所以在項目中使用它之前,您可能需要稍微玩一下代碼。這並不是直接的,因爲Doctrine 1.x曾經是,但仍然相當容易。這裏是一些示例代碼,我用我自己(在使用它之前正確地創建文件夾)
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!';
我已經實現了新的命令來實現這一https://github.com/umpirsky/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesDbCommand.php
只需添加這樣的:
$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();
- 1. 從JPA註釋實體類自動生成數據模式
- 2. 如何使用註釋配置從實體生成數據庫模式?
- 3. 休眠逆向工程從數據庫表中生成帶註釋的POJO類
- 4. 從c#生成數據庫模式類
- 5. 如何從emf模型生成帶註釋的'java代碼'
- 6. 從生成的類生成數據註釋
- 7. 帶OneToOne註釋的數據庫結構
- 8. 帶Bools的數據註釋
- 9. 從JPA註釋生成DDL
- 10. 從Java JAXB註釋類生成的模式中生成XSD限制
- 11. 帶註釋的servlet模式的Embedded Jetty?
- 12. 如何從JAXB註釋類生成JSON模式?
- 13. 使用帶Hibernate註釋POJO的節儉生成模型
- 14. Erlang數據庫模式生成器
- 15. 生成數據庫模式在IntelliJ15
- 16. 亞音速數據庫模式生成
- 17. ASP.NET MVC 2動態生成模型中的數據註釋
- 18. 從Yii模型生成數據庫模式
- 19. 從MySQL數據庫中爲Doctrine生成YAML模式或模型
- 20. 從模型類生成數據庫
- 21. DOCTRINE:從Mysql數據庫生成模型
- 22. Symfony從模型生成數據庫
- 23. Django從數據庫生成模型
- 24. 在doctrine2中生成模型
- 25. Amchart註釋。從註釋模式返回正常模式
- 26. 重新生成數據庫與從模型生成的表
- 27. 從MySQL查詢生成數據庫模式圖的工具
- 28. 如何從流星中的數據庫生成簡單模式
- 29. 從數據庫模式和內容生成本體的工具
- 30. 從數據庫模式生成基於REST的服務
考慮不要這樣做。如果您專門爲您的應用程序創建它們,您將創建更好的實體。稍後將它們與註釋進行映射。 – rojoca 2010-11-02 18:24:50