2017-08-28 17 views
0

私は古いプロジェクトでsymfony(2.6.9)とdoctrineを使用しています。私がここで働き始めると、マイグレーションの一部が実行され、その後履歴のために削除されたことが分かります。だから私は現在の生産データベースの状態を複製することはできません。それで、本番環境からデータベースバックアップを作成し、私の地元の環境にインストールしてください。そして、私はこのクエリを実行するとエラーが出るsymfony.Iと新しいマイグレーションを実行しようとすると:Doctrineの移行でエラーが発生しました

'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

テーブルの構造を見ることなく、私は推測できます。ただし、ここに投稿した内容に基づいて、そのエラーの原因となっている移行コマンドの場合は、原因は1つしかない可能性があります。

列:video_en.publication_dateは、ある時点でdatetimesを別の形式で保存していて、あるフォーマットから別のフォーマットに日付を正しく変更する。

mysqlまたはsqlに関係なく、「0000 ...」は有効な日付ではありません。しかし、int型、null型、不正な型の日付は、それらをdatetimeに変換するときに、このようにしばしば格納されます。

この問題を修正すると、テーブルに対して一括更新を実行するのと同じくらい簡単でなければなりません:

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

あなたは私のアイデアを与えるので、私は正しいものとして設定されていますが、問題は、私はあなたの提案のクエリを実行した場合、私は私が得る意味存続します私はこの質問を実行することにしました。私はこのクエリを実行することにしました。このクエリを実行することにしました。 UPDATE video_en SET publication_date = "1970-01-01" WHERE publication_date <"1970 -01-01 これで移行を実行できます。 –

+0

あなたの所見を反映するように更新された回答。時間を0に設定できるはずですが、 where句について書いてください。それは決して私が持っていたように働いたことはありません。ありがとう、そして幸せなコーディング! –

関連する問題