【发布时间】:2020-01-29 14:31:06
【问题描述】:
正如教义迁移帮助所说:
Or you can also execute the migration without a warning message which you need to interact with:
./bin/console doctrine:migrations:migrate --no-interaction
我尝试通过命令运行当前迁移版本:
./bin/console doctrine:migrations:migrate current --no-interaction
尽管如此,我总是得到一个错误:
WARNING! You have 1 previously executed migrations in the database that are not registered migrations.
>> 2020-01-29 13:03:03 (20200129130303)
No migrations to execute.
当然,我清楚地理解“我之前执行过 1 次迁移”。 我的目标是在没有任何交互的情况下执行特定的旧版本。我怎样才能实现它?
【问题讨论】:
-
在
migration_versions表中有一条记录20200129130303- 您之前已经进行过迁移并删除了文件,但没有删除数据库记录。删除它以使警告消失。一旦迁移类被从本地机器上推开,就不要再玩迁移类了;) -
It is my goal to execute a specific old version without any interaction.不过,除非您有脚本(用于部署、cronjob 等)设置,否则这是不可能的。命令为bin/console doctrine:migrations:execute 1234567890 -n --up(或--down),将数字替换为类名的日期时间戳。 -
@rkeet 我想通过 ansible 在我的部署过程中使用这个命令。这个想法是在迁移目录中运行最后一个迁移版本。当我结帐到具体的 git 标签或分支并希望根据迁移文件夹设置我的数据库时,它会很方便。
-
对,在这种情况下,您只需运行
bin/console doctrine:migrations:migrate -n,您已经完成了。该命令获取所有可用的 Migration 类文件,检查编号(在类名中)与migration_versions中的记录,并执行数据库中 not 的所有类。因此,如果您在签出指定的 git 提交(或最新的“开发”或“主”等)后执行该命令(使用 Ansible),那么它会执行所有可用以创建“最新可用”(在提交的限制内) )。