Lorsque vous créé une colonne timestamp
dans votre base de données, à l’aide d’une migration Laravel comme ceci :
<?php
Schema::create(‘my_table’, function (Blueprint $table) {
$table->increments('id');
$table->timestamp(‘requested_at’);
});
Laravel utilise cette commande SQL :
CREATE TABLE `my_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`requested_at` timestamp NOT NULL DEFAULT current_timestamp() ON UPDATE current_timestamp(),
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=900329 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Le problème, c’est qu’à chaque mise à jour de vos données, si vous ne spécifiez rien comme valeur pour requested_at
, il va prendre le timestamp actuel : notez le ON UPDATE current_timestamp()
.
Pour éviter ça, il vous suffit de définir requested_at
comme étant nullable (oui, même si cette colonne ne sera jamais vide).
<?php
Schema::create(‘my_table’, function (Blueprint $table) {
$table->increments('id');
$table->timestamp(‘requested_at’)->nullable();
});
Voila la requête SQL qui sera générée :
CREATE TABLE `my_table` (
`id` int(10) unsigned NOT NULL AUTO_INCREMENT,
`requested_at` timestamp NULL DEFAULT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB AUTO_INCREMENT=900329 DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci
Pour connaitre la requête SQL utilisée pour la création de la table :
SHOW CREATE TABLE my_table