2017-08-28 50 views
0

我在舊項目中使用了symfony(2.6.9)和原則。當我開始在這裏工作時,我意識到一些遷移被執行,然後刪除了歷史記錄。所以我不能複製當前的生產數據庫狀態。因此,從生產中創建數據庫備份並將其安裝在本地環境中。然後當我嘗試用symfony.I執行新移民得到一個錯誤,當我執行這個查詢:Doctrine Migrations中的錯誤

'ALTER TABLE video_en ADD CONSTRAINT FK_65A1A65C1B53C8FE FOREIGN KEY (portuguese_id) REFERENCES video_pt (id) ON DELETE SET NULL'

我得到這個錯誤:

SQLSTATE[22007]: Invalid datetime format: 1292 Incorrect datetime value: '0000-00-00 00:00:00' for column 'publication_date' at row 1 

我認爲這個問題是有關數據庫中的舊數據。所以,我想在生產中執行遷移並保留所有數據。

有用的是,如果我在一個乾淨的環境中執行遷移。它正在工作(但正如我在第一段中寫的,在生產中執行了一些不在代碼中的遷移)。

回答

0

沒有看到你的表的結構,我只能猜測。但是,根據您在此處發佈的內容,如果這是導致該錯誤的遷移命令,則只能有一個原因:

列:video_en.publication_date在某些時刻以其他格式存儲日期時間,並且遷移失敗正確地將日期從一種格式更改爲另一種格式。

無論您是在mysql還是sql,'0000 ...'都不是有效日期。但是,將int 0,null和格式不正確的日期通常會在將它們轉換爲日期時間時被強制存儲。

修復這個問題應該作爲對錶運行的批量更新簡單:因爲你給我的想法,但問題

UPDATE video_en SET publication_date = '2017-08-28' WHERE publication_date = < '1970-01-01'; 
+0

我設置爲正確的堅持,如果我執行你的建議的查詢,我的意思是,我得到同樣的錯誤,因爲我不能也使用這個日期「00:00:00」來比較你的想法,所以我決定執行這個查詢: UPDATE video_en SET publication_date =「1970-01-01」WHERE publication_date <「1970 -01-01 現在我可以執行遷移了。 –

+0

更新了答案以反映您的發現。應該能夠將時間設置爲0,但是您可以關於where子句的正確答案。這永遠不會像我所擁有的那樣工作。謝謝你,快樂的編碼! –