【问题标题】:Symfony: Base table or view already exists: 1050 Table 'migration_versions' already existsSymfony:基表或视图已经存在:1050 表'migration_versions'已经存在
【发布时间】:2020-08-25 15:16:16
【问题描述】:

我的 migration_versions 做了一些可怕的错误,现在从迁移文件夹中删除了版本,当我尝试运行与迁移有关的任何事情时,我得到了这个错误。有人可以指点我从哪里开始解决这个问题吗?

如果我删除数据库然后删除make:migration,则migration_versions 表将出现在数据库中。之后,如果我尝试运行

php bin/console doctrine:migrations:migrate

我得到错误:

In AbstractMySQLDriver.php line 38:

  An exception occurred while executing 'CREATE TABLE migration_versions (version VARCHAR(14) NOT NULL, executed_at   
  DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', PRIMARY KEY(version)) DEFAULT CHARACTER SET utf8mb4 COLL  
  ATE `utf8mb4_unicode_ci` ENGINE = InnoDB':                                                                          

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'migration_versions' already exists                  


In PDOConnection.php line 43:

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'migration_versions' already exists  


In PDOConnection.php line 41:

  SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'migration_versions' already exists  

如果我从数据库中删除该表,我就可以运行 php bin\console doctrine:migrations:migrate 了。但是,当尝试运行任何进一步的 make:migration/doctrine:migrations:migrate 命令时,我收到与之前相同的错误,指出表 migration_versions 存在。

【问题讨论】:

  • 迁移不是幂等的,你不能多次运行它们。 migration_versions 表本质上会记住您已经运行了哪些迁移,因此不要再次运行它们。一个相当手动的任务是通过教义迁移版本命令添加已经完成的迁移:doctrine-project.org/projects/doctrine-migrations/en/2.2/…(小心使用!)
  • 另外,我相信 make:migrations 是为一次性设置而设计的,当你没有数据库时,之后只使用学说:migrations:diff,或者你删除所有迁移并开始干净
  • 删除数据库并从迁移中删除所有版本后,我使用bin/console make:migration 创建了一个新版本,然后为migration_versions 创建了一个空表。我会假设我应该能够运行bin/console doctrine:migrations:migrate,但我得到了错误。

标签: php mysql symfony doctrine


【解决方案1】:

由于我的配置中的 schema_filter,我也遇到了同样的问题。我的学说.yaml 文件(Symfony 4)有以下内容:

doctrine:
    dbal:
        schema_filter: ~^(table_1|table_2|table_3)$~

我必须像这样简单地将“migration_versions”添加到架构过滤器中:

doctrine:
    dbal:
        schema_filter: ~^(migration_versions|table_1|table_2|table_3)$~

【讨论】:

  • 这正是导致我的问题的原因。我真的应该在答案中标记出来。感谢您的回复?很高兴我不是唯一一个。
【解决方案2】:

我遇到了类似的问题,我只想更改字段名称。

更改字段名后发生同样的问题并尝试使用两个命令进行迁移。

我修复了它:

  • 我删除了数据库内容和迁移/版本文件。
  • bin/console make:migration
  • 还有bin/console doctrine:migrations:migrate

它再次起作用了。

【讨论】:

    猜你喜欢
    • 2021-04-08
    • 1970-01-01
    • 2018-08-26
    • 1970-01-01
    • 2022-07-09
    • 2020-05-16
    • 1970-01-01
    • 2018-02-18
    • 2016-01-28
    相关资源
    最近更新 更多