2011-05-13 137 views
0

我只是改變了我對我的工作symfony項目架構(加一張桌子和幾列),然後跑掉了以下兩條命令: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控制檯並手動刪除了它所抱怨的表和列,但它仍然產生了相同的錯誤。

任何想法?

回答

5

當事情與遷移混亂時,根據具體情況,可能需要做一些事情才能重新走上正軌。

如果您有一個部分運行(在版本中向上或向下)但具有錯誤的遷移類,那麼您的數據庫的模式在遷移之間不一致,並且可能無法啓動或關閉。然後,下次嘗試運行它時,由於已經提交的更改,您會得到更多的錯誤。

然後,您必須僅應用缺失的更改並重新運行它,直到成功爲止。我這樣做是通過臨時評論已經工作的部分遷移並糾正那些失敗的問題。它也可以通過數據庫的管理工具手動完成,但是運行風險並不是以相同的方式完全配置。

有時手動更改migration_version表中存儲的值(使用非Doctrine數據庫工具)以強制Doctrine意識到它的版本不同也很有用。然後嘗試再次向下移動。

此外,我強烈建議始終測試新的遷移類,然後再退回一個版本,然後再重新啓動。教條中存在一些錯誤:特別是使用外鍵的generate-migrations-diff任務可以創建不可逆轉的遷移。我發現那些需要手動編輯才能使它們在兩個方向上都有效。

+1

感謝您的幫助。我最終刪除了所有的遷移數據,並認爲它已返回到版本0並且工作正常。 – regality 2011-05-15 04:28:10

+0

@regality。真高興你做到了。 – ybull 2011-05-15 15:25:13