Symfony迁移失败

时间:2011-05-13 15:56:09

标签: php symfony1 migration

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

php symfony doc:generate-migrations-diff
php symfony doc:migrate

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

  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)"             

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

有什么想法吗?

1 个答案:

答案 0 :(得分:6)

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

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

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

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

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