當您使用schema-tool
,沒有數據庫修改的歷史記錄保存,並在生產/舞臺環境中,這是一個很大的弊端。
假設您在活動項目中擁有複雜的數據庫結構。在下一個變更集中,您必須以某種方式更改數據庫。例如,用戶的聯繫人電話需要以不同的格式存儲,而不是VARCHAR
,而是三個SMALLINT
列的國家/地區代碼,區號和電話號碼。
好吧,這不是很難找出一個查詢當前的數據,將它分成三個值並將其插回。這就是遷移的過程:您可以創建新的字段,然後進行轉換,最後刪除之前保存數據的字段。
甚至更多!當您需要撤消遷移中引入的更改時,您甚至可以描述向後過程(down
遷移)。我們假設某個地方很大程度上依賴於VARCHAR
字段的格式,並且現在您已經更改了結構,但他的代碼片段沒有按預期工作。所以,你運行migration:down
,並且一切都恢復。在這種特定情況下,您只需將舊的VARCHAR
列帶回並連接值,然後刪除這些字段。
主義的遷移工具基本上爲您做了大部分工作。當您對模式進行比較時,它會生成所有必需的up
和down
,因此您只需處理在應用遷移時可能損壞的數據。
此外,遷移是讓團隊中的其他開發人員瞭解何時需要更新模式的知識。只需要schema-tool
,你的隊友每次運行時都必須運行doctrine:schema:update
,因爲他們不知道模式是否真的發生了變化。
使用遷移時,您總是會看到migrations文件夾中有一些更新,這意味着您需要更新模式。
來源
2014-04-28 12:33:45
kix
非常好的答案,不能做得更清楚我自己:) – Wcool
@Wcool,謝謝:) – kix
非常有幫助的回答。非常感謝。 –