2017-12-22 31 views
1

5.2から5.3にlaravelにプロジェクトをアップグレードしました。今すぐ実行するときphp artisan migrate私はエラーを受け取ります: SQLSTATE [22007]:無効な日時フォーマット:1292不正確な日時値: 'created_at'列1の '0000-00-00 00:00:00'(SQL:alter table messagesdeleted_atタイムスタンプヌルを追加)。 マイ移行:Blueprint.phpでlaravel 5.3へのアップグレード後、無効なdatetime形式:1292日付時刻の値が正しくない: '0000-00-00 00:00:00'

Schema::table(Models::table('messages'), function (Blueprint $table) { 
     $table->softDeletes(); 
    }); 

public function softDeletes() 
    { 
     return $this->timestamp('deleted_at')->nullable(); 
    } 

答えて

1

Laravel 5.3はNO_ZERO_DATEモードを含む、デフォルトでMySQLの "厳格な" モードを使用するように更新されました。

問題は、既存のデータがdatetime値として '0000-00-00 00:00:00'を持つことが許可されていることです。しかし、今あなたの接続は、その値(NO_ZERO_DATE)を許可しないSQLモードを使用しています。 deleted_at列を追加するためにテーブルを変更しようとすると、created_at列の既存のデータ違反について不平を言っています。

理想的な解決策は、データベース内のすべてのデータを修正することです。つまり、データベースにアクセスし、datetime/timestampフィールドを更新してヌル入力可能にし、データを '0000-00-00 00:00:00'からnullに変換します。

ただし、クイックオプションは、データベース接続で「厳密」モードを無効にすることです。 config/database.phpファイルを開き、データベース接続が'strict' => falseと表示されていることを確認します。

+0

'strict' => false - これが助けになりました。ありがとうございました。しかし、データベースからすべてのデータを削除したとき、私は同じエラーが発生しました。 –

0

タイムスタンプ付きのテーブルにdatetimeカラムを追加した場合(createdおよびupdated_at)同じ問題が発生しました。

私はちょうど追加解決

「 - > NULL可能(真$値=」)私の移行における修飾子:私は、データベースの入力が来るいけない場合、すべてのそのゼロを挿入不満が理解

$table->datetime('expires_at')->nullable($value = true);

を。トリックはnullableになるように命令を追加しました。

関連する問題