Doctrine orm 去';工厂重置';任何迁移
在迁移过程中重置数据库的最佳方法是什么 这是我试过的Doctrine orm 去';工厂重置';任何迁移,doctrine-orm,doctrine,Doctrine Orm,Doctrine,在迁移过程中重置数据库的最佳方法是什么 这是我试过的 删除所有迁移,同时删除所有数据库表。 然后跑 php bin/console原则:mi:diff php bin/console原则:mi:mi 这是行不通的 试着一次运行一个版本,就像这样 php-bin/console原则:迁移:迁移'doctrinmortations\Version20200722104913' 我试过这个: php bin/console原则:数据库:drop--force php bin/console原则:数据库
php bin/console原则:mi:diff
php bin/console原则:mi:mi
这是行不通的
php-bin/console原则:迁移:迁移'doctrinmortations\Version20200722104913'
php bin/console原则:数据库:drop--force
php bin/console原则:数据库:创建
php bin/console原则:mi:mi
问题(细节):
我所做的每件事都会导致同样的结果
信条认为我仍然有一些表要生成,这些表早已不存在了(不再是Entity中的表)
这就是为什么我有这个错误:
执行“删除表”时发生异常
问候语(卡片)(类别):
SQLSTATE[42S02]:未找到基表或视图:1051未知表
'symfony.问候语\卡片\类别'
我也收到了这个警告
[警告]您在数据库中有6个以前执行的迁移不是已注册的迁移
在我的迁移目录中,我只有两次迁移:
Version20200722104913.php
Version20200722143619.php
这里是状态,如果它有帮助的话
bin/控制台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
在这一点上,我真的很希望有一个干净的数据库和一个迁移
如何实现这一点?一次迁移并不是最好的方法,尤其是当您在团队中工作并在不同的分支中执行某些功能时。在一次迁移中,很容易搞砸并做一些错误的事情,比如在您的案例中。因此,进行多次迁移是可以的
对于错误,您可以手动编辑迁移并修复所有错误,然后运行diff和migrate(如果需要),或者您可以删除数据库,删除所有迁移并创建一个新的迁移,然后在更改代码后创建迁移。请注意,使用一个迁移脚本并不是最好的方法,如果您在团队中工作,或者应用程序已经部署。但是,如果您是唯一的开发人员,或者如果您想重新确定某些提交的基础,您可以这样做 如果您真的希望只有一个迁移脚本,这里有一个解决方案。但首先,手动删除数据和表总是一个坏主意,因为条令使用的是migration_表。此表包含条令用于了解数据库当前状态的数据。因此,如果手动删除表,数据库将与迁移表不同步,脚本将失败。为了避免当前的错误,现在必须截断migration_表。如果不够,请删除迁移表;如果不够,请删除并创建数据库(这是最后一次,因为下面是避免这种不匹配的解决方案) 步骤1:通过原则:迁移降级您的数据库
php bin/console doctrine:migrations:migrate first -n
在此步骤中,您的数据库为空。(提示为关键字“first”)
步骤2:删除(备份后)迁移目录中的所有文件
步骤3:创建新迁移
php bin/console make:migration
(或者,如果不使用make bundle,可以使用symfony控制台原则:迁移:diff
)
步骤4:验证并在必要时手动编辑创建的文件
步骤5:升级数据库
php bin/console doctrine:migration:migrate -n
我曾经尝试过几次使用迁移,但结果很糟糕。我回过头来遵循原则:模式:创建、删除和更新。只需清空(或删除)迁移表,并避免迁移,至少在您的模式更加稳定之前是这样。@Cerad我发布了一个解决方案,以避免这种混乱,直到shema稳定下来。:-)效果很好。