2013-04-23 3 views
1

사용자 등록시 데이터베이스를 만들고 싶습니다. 데이터베이스 생성을위한 코드는 내가 AccountBundle에서 해당 데이터베이스에 대해 생성 엔티티를 가지고 있지만 사용자 데이터베이스가 작성 될 때 데이터베이스 스키마를 작성하는 방법을 모르는이즉시 데이터베이스 스키마 만들기

$connectionFactory = $this->container->get('doctrine.dbal.connection_factory'); 
$connection = $connectionFactory->createConnection(array(
    'driver' => 'pdo_mysql', 
    'user' => 'root', 
    'password' => 'mysecretpassword', 
    'host' => 'localhost', 
    'dbname' => 'userdatabase', 
)); 

$params = $connection->getParams(); 
$name = isset($params['path']) ? $params['path'] : $params['dbname']; 

unset($params['dbname']); 

$tmpConnection = DriverManager::getConnection($params); 

// Only quote if we don't have a path 
if (!isset($params['path'])) { 
    $name = $tmpConnection->getDatabasePlatform()->quoteSingleIdentifier($name); 
} 

$error = false; 
try { 
    $tmpConnection->getSchemaManager()->createDatabase($name); 
    echo sprintf('<info>Created database for connection named <comment>%s</comment></info>', $name); 
} catch (\Exception $e) { 
    echo sprintf('<error>Could not create database for connection named <comment>%s</comment></error>', $name); 
    echo sprintf('<error>%s</error>', $e->getMessage()); 
    $error = true; 
} 

$tmpConnection->close(); 

것 같습니다.

답변

1

이것은 종종 테스트에 사용됩니다. 예는 LiipFunctionalTestBundle에서 볼 수 있습니다.

$metadatas = $om->getMetadataFactory()->getAllMetadata(); 
$schemaTool = new SchemaTool($om); 
$schemaTool->dropDatabase($name); 
if (!empty($metadatas)) { 
    $schemaTool->createSchema($metadatas); 
} 
관련 문제