'factory-reset' 任何迁移的最佳方法是什么
What is the best way to 'factory-reset' any migrations
随着迁移一起重置数据库的最佳方法是什么。
这是我试过的。
- 删除所有迁移以及删除所有数据库表。
然后运行
php bin/console doctrine:mi:diff
php bin/console doctrine:mi:mi
那不行。
- 像这样一次尝试运行单个版本
php bin/console doctrine:migrations:migrate 'DoctrineMigrations\Version20200722104913'
- 我试过这个:
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
随着迁移一起重置数据库的最佳方法是什么。
这是我试过的。
- 删除所有迁移以及删除所有数据库表。 然后运行
php bin/console doctrine:mi:diff
php bin/console doctrine:mi:mi
那不行。
- 像这样一次尝试运行单个版本
php bin/console doctrine:migrations:migrate 'DoctrineMigrations\Version20200722104913'
- 我试过这个:
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