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

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


当前回答

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

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

希望这能有所帮助。

其他回答

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

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

希望这能有所帮助。

使用保罗·弗雷塔斯的建议。


在Laravel修复此问题之前,您可以在Schema::create运行之后运行标准数据库查询。

    Schema::create("users", function($table){
        $table->increments('id');
        $table->string('email', 255);
        $table->string('given_name', 100);
        $table->string('family_name', 100);
        $table->timestamp('joined');
        $table->enum('gender', ['male', 'female', 'unisex'])->default('unisex');
        $table->string('timezone', 30)->default('UTC');
        $table->text('about');
    });
    DB::statement("ALTER TABLE ".DB::getTablePrefix()."users CHANGE joined joined TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL");

它对我产生了奇效。

创建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

但事实并非如此:

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

它不会删除选择时间戳时似乎附带的'default 0',只是附加了自定义的默认值。但我们不需要引号。并不是所有操作DB的东西都来自Laravel4。这就是他的观点。他想在某些列上自定义默认值,比如:

$table->timestamps()->default('CURRENT_TIMESTAMP');

我觉得拉威尔不可能。我已经找了一个小时了,看看有没有可能。


更新:保罗·弗雷塔的回答表明这是可能的,但语法并不简单。

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

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