php - Symfony/Doctrine 中的动态数据库和模式创建

标签 php doctrine symfony-2.8

我想在静态数据库中存储数据库连接。根据需要,我想创建一个新数据库,将凭据存储在我的静态数据库中,然后根据现有实体在新数据库中创建模式。我知道如何使用 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);

我的示例代码没有像我希望的那样工作。 Doctrine 找不到我的实体。任何人都可以提示我执行此类任务的正确方法吗?

最佳答案

我想出了一个解决方案,想把代码片段留给后人:

/**
 * @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')   
      //...
    );

请告诉我,如果有人知道更好的方法。干杯

关于php - Symfony/Doctrine 中的动态数据库和模式创建,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36306923/

相关文章:

symfony - 将参数传递给 Symfony 2.8 中的嵌入式 Controller

php - 使用 Symfony 2.8 生成表单会抛出 Twig_Error_Runtime

php - Symfony2 - 无法更新 Doctrine 模式。基表或 View 已存在

php - 删除级联中的实体在多对多关系中不起作用

php - 新闻门户和数据库的重量

php - 连接单个表中的两组结果

php - 使用 Symfony 和 FOSRestBundle 保存多对一关系

php - Symfony 2 - 非捆绑库集成和定位

php - 像 drupal_write_record 一样简单的读取操作

php - Debian 服务器上 PHP DOM 的 UTF-8 问题