laravel 5.3 にアップグレードした後、無効な datetime 形式: 1292 不正な datetime 値: '0000-00-00 00:00:00' というエラーが発生します。質問する

laravel 5.3 にアップグレードした後、無効な datetime 形式: 1292 不正な datetime 値: '0000-00-00 00:00:00' というエラーが発生します。質問する

プロジェクトを Laravel 5.2 から 5.3 にアップグレードしました。実行しようとすると、php artisan migrate次のエラーが発生します:

SQLSTATE[22007]: 無効な日時形式: 1292 不正な日時値: '0000-00-00 00:00:00' (行 1 の列 'created_at') (SQL: alter table messagesadd deleted_attimestamp null)。

私の移住:

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

Blueprint.php の場合:

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

ベストアンサー1

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

問題は、既存のデータに日時値として「0000-00-00 00:00:00」が許可されていることです。しかし、現在、接続ではその値を許可しない SQL モードが使用されています ( NO_ZERO_DATE)。テーブルを変更して列を追加しようとするとdeleted_at、列内の既存のデータ違反についてエラーが発生しますcreated_at

理想的な解決策は、データベース内のすべてのデータを修正することです。つまり、データベースを調べて、datetime/timestamp フィールドを null 値が許可されるように更新し、そのデータを '0000-00-00 00:00:00' から null に変換します。

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

おすすめ記事