Php Symfony/Doctrine中的动态数据库和模式创建
我想在静态数据库中存储数据库连接。按需创建新数据库,将凭据存储在静态数据库中,然后从现有实体在新数据库中创建模式。我知道如何使用symfony的命令行工具来实现这一点。我的目标是让它在服务中工作。我查阅了条令文件,试图让某些东西发挥作用:Php Symfony/Doctrine中的动态数据库和模式创建,php,doctrine,symfony-2.8,Php,Doctrine,Symfony 2.8,我想在静态数据库中存储数据库连接。按需创建新数据库,将凭据存储在静态数据库中,然后从现有实体在新数据库中创建模式。我知道如何使用symfony的命令行工具来实现这一点。我的目标是让它在服务中工作。我查阅了条令文件,试图让某些东西发挥作用: $conn =$this->getDoctrine()->getConnection()->getSchemaManager()->createDatabase($dbname); $isDevMode = true;
$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);
我的示例代码不像我希望的那样工作。条令找不到我的实体。有谁能给我一个关于如何正确实现这项任务的提示吗?我想出了一个解决方案,希望将代码片段留给后代:
/**
* @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')
//...
);
如果有人知道更好的方法,请告诉我。干杯