Maison >développement back-end >tutoriel php >Comment définir la valeur par défaut des colonnes d'horodatage sur CURRENT_TIMESTAMP et la mise à jour automatique dans les migrations Laravel ?

Comment définir la valeur par défaut des colonnes d'horodatage sur CURRENT_TIMESTAMP et la mise à jour automatique dans les migrations Laravel ?

Barbara Streisand
Barbara Streisandoriginal
2024-10-20 12:26:02508parcourir

How Do I Set the Default Value of Timestamp Columns to CURRENT_TIMESTAMP and Auto Update in Laravel Migrations?

Définition de la valeur par défaut de la colonne d'horodatage sur l'horodatage actuel dans les migrations Laravel

Question : Comment puis-je créer un horodatage colonne avec une valeur par défaut de CURRENT_TIMESTAMP et la mettre à jour vers CURRENT_TIMESTAMP dans les migrations Laravel ?

Le générateur de schéma de Laravel ne fournit pas explicitement de méthode pour définir la valeur par défaut d'une colonne d'horodatage sur CURRENT_TIMESTAMP.

Réponse :

Pour définir la valeur par défaut sur CURRENT_TIMESTAMP, utilisez la méthode DB::raw() pour définir une expression brute :

$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));

Pour MySQL, vous pouvez utilisez en outre la clause ON UPDATE dans DB::raw():

$table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));

Depuis Laravel 5.1.25, vous pouvez utiliser la méthode useCurrent() pour simplifier cela :

$table->timestamp('created_at')->useCurrent();

Dans Laravel 8.36.0 et supérieur, useCurrent() peut être utilisé avec la méthode useCurrentOnUpdate() pour les valeurs par défaut et lors de la mise à jour :

$table->timestamp('updated_at')->useCurrent()->useCurrentOnUpdate();

Gotchas :

  • MySQL : À partir de la version 5.7, 0000-00-00 00:00:00 n'est plus valide comme horodatage. Utilisez useCurrent() ou autorisez les valeurs nulles.
  • PostgreSQL dans Laravel 4.x : Spécifiez une précision nulle à la fonction CURRENT_TIMESTAMP pour éviter les erreurs de microsecondes.
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP(0)'));

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn