Maison >base de données >tutoriel mysql >Comment définir les colonnes d'horodatage par défaut sur CURRENT_TIMESTAMP dans les migrations Laravel ?

Comment définir les colonnes d'horodatage par défaut sur CURRENT_TIMESTAMP dans les migrations Laravel ?

DDD
DDDoriginal
2024-11-22 08:14:15742parcourir

How to Set Default Timestamp Columns to CURRENT_TIMESTAMP in Laravel Migrations?

Laravel : définition des colonnes d'horodatage par défaut sur l'horodatage actuel

Problème :

Dans le générateur de schéma/migrations de Laravel, les utilisateurs demandez des conseils sur la façon de créer une colonne d'horodatage avec une valeur par défaut de CURRENT_TIMESTAMP ON MISE À JOUR CURRENT_TIMESTAMP. La fonction timestamps() est actuellement définie par défaut sur 0000-00-00 00:00 pour les colonnes créées et mises à jour.

Solution :

Pour définir la valeur par défaut d'un colonne d'horodatage vers CURRENT_TIMESTAMP à l'aide des migrations Laravel, utilisez DB::raw():

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

Depuis Laravel 5.1.25, vous pouvez simplifier cela en utilisant le modificateur de colonne useCurrent() :

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

Pour MySQL, ON UPDATE CURRENT_TIMESTAMP peut être utilisé via DB::raw():

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

Commencer avec Laravel 8.36.0, useCurrent() et useCurrentOnUpdate() ensemble peuvent obtenir le même résultat :

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

Gotchas :

  • MySQL : Avant la version 5.7, 0000-00-00 00:00:00 était invalide. Utilisez useCurrent() ou nullable() pour résoudre ce problème.
  • PostgreSQL & Laravel 4.x : La précision par défaut des colonnes d'horodatage a causé des problèmes avec l'analyse de Carbon. Utilisez DB::raw('CURRENT_TIMESTAMP(0)') pour garantir une précision nulle.
  • PostgreSQL & Laravel 5.0 : La précision par défaut est désormais nulle, ce qui évite ce problème.

Merci à @andrewhl pour le problème de Laravel 4.x et @ChanakaKarunarathne pour le raccourci useCurrentOnUpdate().

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