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稳定下来。:-)效果很好。