【发布时间】:2021-04-08 20:42:48
【问题描述】:
我有一个 Symfony 5 应用程序,其中包括三个学说迁移。我尝试运行以下命令:
bin/console doctrine:database:drop --force
bin/console doctrine:database:create
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_a
t DATETIME NOT NULL COMMENT '(DC2Type:datetime_immutable)', PRIMARY KEY(version)) DEFAULT CHARACTER SET utf8mb4
COLLATE `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
我已尝试在doctrine.yaml 中添加以下代码:
doctrine:
dbal:
url: '%env(resolve:DATABASE_URL)%'
schema_filter: ~^(migration_versions)$~
...根据this answer on a different question,但这并不能解决问题。我在这里做错了什么?
====
编辑1:这里是doctrine_migrations.yaml的内容:
doctrine_migrations:
dir_name: '%kernel.project_dir%/src/Migrations'
# namespace is arbitrary but should be different from App\Migrations
# as migrations classes should NOT be autoloaded
namespace: DoctrineMigrations
编辑 2:我仔细检查以确保我的三个迁移中没有一个包含 migration_versions 表的创建。它不是在这三个迁移中的任何一个中创建的。所以这个错误是从哪里来的很神秘。
编辑 3:我运行了这三个命令:
bin/console doctrine:migrations:execute --up --version 20191210174025
bin/console doctrine:migrations:execute --up --version 20201219113811
bin/console doctrine:migrations:execute --up --version 20201221174858
...每次都返回Symfony 5.0.1 (env: dev, debug: true),没有出现错误。所以我认为问题不在于迁移本身。
【问题讨论】:
-
你能给我们看看你的 migrations.php 或 migrations.yml ...
-
在没有代码的情况下很难找到解决方案,但是当我阅读您的代码时,我会尝试这样做,每件事似乎都是正确的,我的建议是将所有设置恢复为默认值,清空您的 symfony 缓存(它可能会导致很多迁移问题)我会使用 rm -rf var/cache/* 不推荐,但只是为了确保所有东西都消失并在创建数据库后运行前 2 个命令 run bin/console d:m :execute --up (迁移编号),然后是所有迁移,让我们知道这种方法是否有效,您能否分享迁移版本
-
我认为您可以尝试运行每个迁移以找出问题所在的文件。你也可以试试这个 php bin/console 学说:migrations:execute —up [Your version number]
-
@AliMhanna 完成——我在问题的底部添加了一个注释,详细说明了结果。
-
@Patrick 这正是我想检查的迁移是否正确,所以 smoehow 原则也在从另一个地方加载迁移,我猜你做到了,但我要确保你删除所有缓存并尝试使用 d:m:m ?
标签: php symfony doctrine database-migration