2013-04-23 93 views
1

我想在注册时为用户创建数据库。创建数据库的代码看起来像这样实时创建数据库模式

$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(); 

我有在AccountBundle该数据库中创建的实体,但不知道如何创建用户数据库时创建数据库模式。

回答

1

它经常用于测试。一个例子可以在LiipFunctionalTestBundle中看到。

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