web-dev-qa-db-fra.com

Après la mise à niveau vers laravel 5.3 erreur format de date/heure invalide: 1292 Valeur date/heure incorrecte: '0000-00-00 00:00:00'

J'ai mis à niveau mon projet de laravel 5.3 à partir de 5.2. Maintenant, quand je veux exécuter php artisan migrate je reçois une erreur: SQLSTATE [22007]: Format de date/heure incorrect: 1292 Valeur de date/heure incorrecte: '0000-00-00 00:00:00' pour la colonne 'created_at' à la ligne 1 (SQL: modifier la table messages ajouter deleted_at horodatage null) . migration:

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

Dans Blueprint.php:

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

Laravel 5.3 a été mis à jour pour utiliser le mode "strict" MySQL par défaut, qui inclut le mode NO_ZERO_DATE.

Le problème est que vos données existantes ont été autorisées à utiliser "0000-00-00 00:00:00" comme valeur datetime. Mais maintenant, votre connexion utilise un mode SQL qui n'autorise pas cette valeur (NO_ZERO_DATE). Lorsque vous essayez de modifier la table pour ajouter la colonne deleted_at, il se plaint des violations de données existantes dans la colonne created_at.

La solution idéale serait de corriger toutes les données de la base de données. En d’autres termes, parcourez votre base de données et mettez à jour vos champs date/heure afin qu’ils aient la valeur Null, puis convertissez leurs données de «0000-00-00 00:00:00» en null.

Cependant, l’option rapide consiste simplement à désactiver le mode "strict" sur votre connexion à la base de données. Ouvrez votre fichier config/database.php et assurez-vous que votre connexion à la base de données affiche 'strict' => false.

11
patricus

J'aime créer la valeur par défaut comme NOW() de toute façon.

Donc, $table->datetime('expires_at')->default(NOW()); est aussi une bonne option.

1
Roger Thomas Riche

Cette erreur est due à STRICT_TRANS_TABLES et NO_ZERO_DATE dans sqlmode pour mysql 5.7

désactivé et de cette façon tout fonctionne correctement.