【问题标题】:Doctrine2 Symfony2 migration on multiple databasesDoctrine2 Symfony2 在多个数据库上的迁移
【发布时间】:2014-10-11 15:51:57
【问题描述】:

我在使用 Symfony2 和 Doctrine 对非默认数据库进行数据库迁移时遇到了一些麻烦。

我正在使用两个数据库和两个实体管理器。我有两个包,每个包都可以与相应的 EM 配合使用,所以一切都应该完全分开。

在我的 DefaultBundle 下,我进行了大约 20 个迁移文件的迁移,这些迁移文件都适用于默认数据库。我的 SecondBundle 有一个适用于 seconddb 的迁移文件。

当我尝试跑步时

   php app/console doctrine:migrations:migrate --no-interaction --em="second"

我来了

Migration 20140709212101 failed during Execution. Error There is no table with name 'second_database.users' in the schema.

  [Doctrine\DBAL\Schema\SchemaException]                                  
  There is no table with name 'second_database.users' in the schema.  

完全正确,“用户”是我的主数据库中的一个表。这里发生的情况是,它尝试运行的迁移文件实际上是 DefaultCore 中 20 个文件中的第一个(它们都是旧的并且已经应用​​)。因为我已经指定了 --em 它是交叉迁移,所以我不想针对我正在使用的数据库运行。似乎没有另一个命令行选项来指定捆绑包,就像其他迁移命令(如生成)一样。我想忽略 DefaultBundle,只从我的 SecondBundle 运行我的迁移。

【问题讨论】:

标签: symfony doctrine-orm


【解决方案1】:

解决方案是您必须运行两次迁移,每次 --em 一次,然后在迁移本身中检查您正在使用的数据库,看看是否应该运行它。您使您的迁移 ContainerAware,以便您可以访问。示例:

class Version201501021322 extends AbstractMigration implements ContainerAwareInterface
{
    private $container;

    public function setContainer(ContainerInterface $container = null)
    {
        $this->container = $container;
    }

    /**
     * @param Schema $schema
     */
    public function up(Schema $schema)
    {
        $this->skipIf($this->connection->getDatabase() != $this->container->getParameter('second_database_name'), 'Skipping database.');

        $this->addsql("//migration here");
    }


}

【讨论】:

    【解决方案2】:

    我最近也遇到过这个问题。

    问题出在doctrine:fixtures:load 尝试为您传递的这个实体管理器清除数据库,但它失败了,因为他找不到存储在另一个数据库中的特定表。

    为避免此问题,您可以使用密钥--append。 例如:

    $ php app/console doctrine:fixtures:load --em=second --append
    

    此键意味着您的数据库不会被清除,因此固定装置将加载现有数据。

    这仅适用于夹具仅为second 连接加载数据的情况。

    我认为你可以通过传入--fixtures key, fixtures 目录来避免这种情况(但我不确定)。


    就我而言,我有 2 个数据库和 2 个连接(defaultnot_default),但我只有 default 连接的固定装置,所以这对我来说很好。

    【讨论】:

      猜你喜欢
      • 2013-06-30
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 2022-12-09
      • 2013-03-06
      • 1970-01-01
      • 2023-03-28
      • 1970-01-01
      相关资源
      最近更新 更多