我想使用Laravel Schema Builder/Migrations创建一个默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的时间戳列。我已经多次阅读Laravel文档,我不知道如何将其作为时间戳列的默认值。

timestamps()函数将它所生成的两列的默认值设置为0000-00-00 00:00。


当前回答

在laravel 7,8中设置当前时间使用以下方法:

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

其他回答

在Laravel 5中:

$table->timestamps(); //Adds created_at and updated_at columns.

文档:http://laravel.com/docs/5.1/migrations creating-columns

如果你想为一个datetime列设置当前的日期时间(就像我在谷歌搜索时那样),使用这种方式

$table->dateTime('signed_when')->useCurrent();

这就是你怎么做的,我已经检查过了,它在我的Laravel 4.2上工作。

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

希望这能有所帮助。

作为未来谷歌人的额外可能性

我发现,当记录被创建但从未被修改时,在updated_at列中设置null更有用。它减少了数据库大小(好吧,只是一点点),它可以在第一眼看到数据从未被修改过。

我使用的是:

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

(在Laravel 7+8与mysql 8)。


编辑:因为Laravel 8你还可以使用:

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

达到同样的效果。

感谢@bilogic指出这一点。

创建created_at和updated_at列:

$t->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$t->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));

你需要MySQL版本>= 5.6.5有多个列的CURRENT_TIMESTAMP