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
Libérer: 2024-10-20 12:26:02
original
575 Les gens l'ont consulté

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'));
Copier après la connexion

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'));
Copier après la connexion

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

$table->timestamp('created_at')->useCurrent();
Copier après la connexion

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();
Copier après la connexion

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)'));
Copier après la connexion

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 de ce site Web
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
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal