'factory-reset' 任何迁移的最佳方法是什么

What is the best way to 'factory-reset' any migrations

随着迁移一起重置数据库的最佳方法是什么。

这是我试过的。

  1. 删除所有迁移以及删除所有数据库表。 然后运行

php bin/console doctrine:mi:diff

php bin/console doctrine:mi:mi

那不行。

  1. 像这样一次尝试运行单个版本

php bin/console doctrine:migrations:migrate 'DoctrineMigrations\Version20200722104913'

  1. 我试过这个:

php bin/console doctrine:database:drop --force

php bin/console doctrine:database:create

php bin/console doctrine:mi:mi

问题(详细):

我所做的一切都会导致相同的结果。

Doctrine 认为我还有一些表格要生成,但这些表格早已消失(不再在 Enitity 中)

这就是我出现此错误的原因:

An exception occurred while executing 'DROP TABLE greetings_card_category':

SQLSTATE[42S02]: Base table or view not found: 1051 Unknown table 'symfony.greetings_card_category'

我也收到这个警告

[WARNING] You have 6 previously executed migrations in the database that are not registered migrations.

在我的迁移目录中,我只有两个迁移:

Version20200722104913.php
Version20200722143619.php

这是状态,如果有帮助的话。

bin/console do:mi:status

| Versions             | Previous             | DoctrineMigrations\Version20200717093052                               |
|                      | Current              | DoctrineMigrations\Version20200722150530                               |
|                      | Next                 | DoctrineMigrations\Version20200722104913                               |
|                      | Latest               | DoctrineMigrations\Version20200722143619                               |
|--------------------------------------------------------------------------------------------------------
| Migrations           | Executed             | 6                                                                      |
|                      | Executed Unavailable | 6                                                                      |
|                      | Available            | 2                                                                      |
|                      | New                  | 2

在这一点上,我真的很想拥有 1 个干净的数据库和 1 个迁移。

如何实现?

进行一次迁移并不是最好的方法,尤其是当您在团队中工作并在不同的分支机构执行某些功能时。通过一次迁移,就像您的情况一样,很容易搞砸并做错事。所以有很多迁移是可以的。

你的错误呢,你可以手动编辑你的迁移并修复所有错误,然后 运行 diff 和迁移(如果需要),或者你可以删除你的数据库,删除所有迁移并创建一个新的,然后在更改代码后创建迁移。

请注意,如果您在团队中工作或应用程序已部署,那么拥有一个迁移脚本并不是最佳方式。但是,如果您是唯一的开发人员,或者如果您想对某些提交进行变基,则可以这样做。

如果你真的想只有一个迁移脚本,这里有一个解决方案。但首先,手动删除数据和 table 总是一个坏主意,因为教义使用 migration_table。 table 包含学说用来了解数据库当前状态的数据。因此,您手动删除 tables,您的数据库将与迁移 table 不同步,并且您的脚本将失败。为避免当前错误,您现在必须截断 migration_table。如果还不够,就放弃迁移 table,如果还不够,就放弃并创建数据库(最后一次,因为下面是避免这种不匹配的解决方案。

第 1 步: 通过 doctrine:migrate

降级数据库
php bin/console doctrine:migrations:migrate first -n

在这一步您的数据库是空的。 (提示是关键字“first”)

第二步:删除(备份后)迁移目录下的所有文件

第 3 步: 创建新迁移

php bin/console make:migration

(如果不使用 make-bundle,也可以使用 symfony console doctrine:migrations:diff

第 4 步: 验证并在必要时手动编辑创建的文件。

第 5 步: 升级数据库

php bin/console doctrine:migration:migrate -n