Symfony迁移失败

reg*_*ity 0 php migration symfony1

我刚刚更改了我正在处理的symfony项目的模式(添加了一个表和几列)并运行了以下两个命令:

php symfony doc:generate-migrations-diff
php symfony doc:migrate
Run Code Online (Sandbox Code Playgroud)

以前这没有任何问题,但这次它吓坏了.我意外地给了两个相同名称的表,它合理地失败了,但是现在我修复了我的模式文件它仍然无法工作.它会产生以下错误:

  The following errors occurred:                                                                                                                                                                                                                                                                                           

   - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'media_images' already exists. Failing Query: "CREATE TABLE media_images (id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(255), start_date DATE, end_date DATE, website VARCHAR(255), location TEXT, description TEXT, PRIMARY KEY(id)) ENGINE = INNODB"  
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"                                                                                                                                                                               
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"                                                                                                                                                                               
   - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'media_events' already exists. Failing Query: "CREATE TABLE media_events (id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(255), start_date DATE, end_date DATE, website VARCHAR(255), location TEXT, description TEXT, PRIMARY KEY(id)) ENGINE = INNODB"  
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"                                                                                                                                                                               
   - SQLSTATE[42S01]: Base table or view already exists: 1050 Table 'media_events' already exists. Failing Query: "CREATE TABLE media_events (id INT UNSIGNED AUTO_INCREMENT, name VARCHAR(255), start_date DATE, end_date DATE, website VARCHAR(255), location TEXT, description TEXT, PRIMARY KEY(id)) ENGINE = INNODB"  
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company_type'. Failing Query: "ALTER TABLE bio ADD company_type VARCHAR(255)"                                                                                                                                                                     
   - SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'company'. Failing Query: "ALTER TABLE bio ADD company VARCHAR(255)"             
Run Code Online (Sandbox Code Playgroud)

大多数情况下这是令人困惑的,因为它多次报告相同的错误.我删除了/tmp/doctrine_schema_[random_number].yml文件并再次尝试,没有运气.我还提出了mysql控制台并手动删除了它抱怨的表和列,但它仍然生成了相同的错误.

有任何想法吗?

ybu*_*ull 6

当事情变得混乱时,根据具体情况,您可能需要做一些事情才能重新回到正轨.

如果您有一个部分工作(在版本中上升或下移)但有错误的迁移类,那么迁移之间数据库的模式不一致,然后可能无法上升或下降.然后,当您下次尝试运行它时,由于已经提交的更改,您将获得更多错误.

然后,您必须仅应用缺少的更改并重新运行它,直到成功为止.我通过暂时评论已经工作的迁移部分并纠正那些失败的问题来做到这一点. 它也可以通过数据库的管理工具手动完成,但是您可能会面临不完全以相同方式配置事物的风险.

有时手动更改存储在migration_version表中的值(使用非Doctrine数据库工具)来强制Doctrine实现它的不同版本也很有用.然后尝试再次向下迁移.

此外,我强烈建议您始终通过应用它们来测试新的迁移类,然后再返回一个版本.该学说中存在一些错误:generate-migrations-diff任务,特别是使用外键可以创建不可逆转的迁移.我发现在运行它们之前需要手动编辑它们才能在两个方向上都有效.