2016-03-30 45 views
1

我想將數據庫連接存儲在靜態數據庫中。按需我想創建一個新的數據庫,將憑據存儲在我的靜態數據庫中,然後從現有實體中創建新數據庫中的模式。我知道如何通過使用symfony的命令行工具來做到這一點。我的目標是讓它在服務中工作。我查看了Doctrine文檔,並嘗試做一些工作:在Symfony/Doctrine中創建動態數據庫和模式

$conn =$this->getDoctrine()->getConnection()->getSchemaManager()->createDatabase($dbname); 
    $isDevMode = true; 
    $config = Setup::createAnnotationMetadataConfiguration(array('UiCoreDbBundle/Entity'), $isDevMode); 

    $conn = array(
     'driver' => 'pdo_mysql', 
     'host' => '127.0.0.1', 
     'user' => 'root', 
     'dbname' => $dbname 
    ); 
    $em = EntityManager::create($conn,$config); 

    $tool = new SchemaTool($em); 
    $classes = array(
     $em->getClassMetadata('Product') 
     //... 
    ); 

    $tool->createSchema($classes); 

我的示例代碼不工作,就像我希望它會。學說找不到我的實體。任何人都可以給我一個正確的方式來實現這樣的任務提示?

回答

1

我想出了一個解決方案,並希望留下的代碼片段,爲子孫後代:

/** 
* @param string $dbname 
* @throws \Doctrine\ORM\ORMException 
* @throws \Doctrine\ORM\Tools\ToolsException 
*/ 
public function createDatabase($dbname) 
{ 
    $this->em->getConnection()->getSchemaManager()->createDatabase($dbname); 
    $params = $this->em->getConnection()->getParams(); 
    $conn = array(
     'driver' => $params['driver'], 
     'host' => $params['host'], 
     'user' => $params['user'], 
     'dbname' => $dbname 
    ); 
    $newEm = EntityManager::create($conn,$this->em->getConfiguration(), $this->em->getEventManager()); 
    $meta = $this->em->getMetadataFactory()->getAllMetadata(); 

    $tool = new SchemaTool($newEm); 
    $tool->createSchema($meta); 
} 

基本上我應對我現有的默認實體管理器,哪知道我的實體,並提出一些參數變化。除了getAllMetadata,您可以手動添加類:

$meta = array(
     $newEm->getClassMetadata('Bundlename:Entityclass') 
     //... 
    ); 

請讓我知道,如果有人知道更好的方法。歡呼聲