Mevcut bir veritabanı şemasından, Doküman 2 varlıkları ilgili doküman bloğu ek açıklamaları ile oluşturulabilir mi?db şemadan açıklamalı doctrine2 girişleri oluştur
cevap
işe yukarıdaki kodu için bu değişiklikleri yaptıktan zorunda kaldı ..
<?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!';
?>
ve mysql bağlantısı konfigürasyonu gibi:
https://github.com/doctrine/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/ConsoleRunner.php itibariyle$connectionParams = array(
'driver' => 'pdo_mysql',
'host' => 'localhost',
'port' => '3306',
'user' => 'root',
'password' => 'root',
'dbname' => 'database',
'charset' => 'utf8',
);
Teşekkürler! Bu aslında işe yaradı. (Doktora dahil programa benzemez). - Sadece kodunuzu '$ connectionParams' altından kullanmış olmama rağmen, ortam ayarlarınızdan emin değilim. Örneğin, 'register();' işlevi açıkça tanımlanmamıştır. Zaten büyük +1! – vbence
Bu benim için iyi çalışıyor ... Senin için büyük bir +1. Aynı problemi olan başkaları için lütfen bu cevabı kullanın, diğerleri işe yaramayacaktır ... – Tareq
@dminer: Scriptiniz başarılı ve doctrine yeni bie olduğum için çok zaman harcadım. Bu betik, CRUD işlemleri hariç olmak üzere setter ve getter yöntemiyle veritabanından varlık yarattı. Bir sonraki temel CRUD işlemini o varlıkta eklemek isterim. Projemin bir senfoni projesi değil, basit bir çekirdek proje olduğunu lütfen unutmayın. – neeraj
Evet, ancak RDBMS veri türleri tam olarak desteklenmiyor olsa da, projenizde kullanmadan önce kodunuzla biraz oynamanız gerekebilir. Doctrine 1.x'in eskiden olduğu gibi değil, daha da kolay. Aşağıda bir örnek kod ben https://github.com/umpirsky/doctrine2/blob/master/lib/Doctrine/ORM/Tools/Console/Command/GenerateEntitiesDbCommand.php
Bunun gibi ekleyin Bunu başarmak için yeni komut uygulamış
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!';
(kullanmadan önce düzgün klasörler oluşturabilirsiniz) kendim kullandı:
$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();
, varlıklar üretme zaten öğretinin varsayılan olarak desteklenmektedir CLI
- 1. Şemadan @XmlJavaTypeAdapter ile java sınıfı oluştur
- 2. Mevcut şemadan tablo ilişki diyagramı oluştur (Sqlite Databse için)
- 3. Doctrine2
- 4. Doctrine2
- 5. Dağıtım için env girişleri nasıl ayarlanır
- 6. Erişim açıklamalı alanları
- 7. Ek açıklamalı ServiceLocatorFactoryBean?
- 8. @SpringApplicationConfiguration açıklamalı test
- 9. Spring Boot'da DB DB Hazırda bekletme Db Schema
- 10. Doctrine2 dönüşüm hatası
- 11. Zend2 + Doctrine2 Kimlik Doğrulama
- 12. Doctrine2 Querybuilder bitwise ve
- 13. Depolama Doctrine2 DateTime Sadece
- 14. Doctrine2: Örneğin bir dernek
- 15. Doctrine2: - En İyi Uygulama
- 16. PHPUnit'teki test formu girişleri
- 17. Farklı klavye girişleri kullanın
- 18. Apache Spark'de şemadan veri türlerinin listesi alın
- 19. urlparse.urlparse şemadan sonra 2 yerine 3 '/' döndürüyor
- 20. DB
- 21. DB
- 22. DB
- 23. AspectJ - Açıklamalı yöntem parametresi değerini
- 24. Açıklamalı Metin için Javascript Kütüphaneleri?
- 25. @xmlSchema ek açıklamalı kullanımı jaxb
- 26. Doctrine2 sorgu oluşturucusunda Chaing orX
- 27. Doctrine2 ile çağırma silme hakkında
- 28. Doctrine2 silme sorgusu nasıl yazılır
- 29. Doctrine2 LEFT JOIN 2 koşullu
- 30. uygulama sayfası yinelenen girişleri engeller
Bunu yapmayın. Özellikle uygulamanız için bunları sıfırdan oluşturursanız daha iyi varlıklar oluşturabilirsiniz. Daha sonra ek açıklamalarla eşleyin. – rojoca