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();
}
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
.
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.
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.