我想使用Laravel Schema Builder/Migrations创建一个默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的时间戳列。我已经多次阅读Laravel文档,我不知道如何将其作为时间戳列的默认值。
timestamps()函数将它所生成的两列的默认值设置为0000-00-00 00:00。
我想使用Laravel Schema Builder/Migrations创建一个默认值为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP的时间戳列。我已经多次阅读Laravel文档,我不知道如何将其作为时间戳列的默认值。
timestamps()函数将它所生成的两列的默认值设置为0000-00-00 00:00。
当前回答
在Laravel 5中:
$table->timestamps(); //Adds created_at and updated_at columns.
文档:http://laravel.com/docs/5.1/migrations creating-columns
其他回答
但事实并非如此:
$table->timestamp('created_at')->default('CURRENT_TIMESTAMP');
它不会删除选择时间戳时似乎附带的'default 0',只是附加了自定义的默认值。但我们不需要引号。并不是所有操作DB的东西都来自Laravel4。这就是他的观点。他想在某些列上自定义默认值,比如:
$table->timestamps()->default('CURRENT_TIMESTAMP');
我觉得拉威尔不可能。我已经找了一个小时了,看看有没有可能。
更新:保罗·弗雷塔的回答表明这是可能的,但语法并不简单。
创建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
如果你想为一个datetime列设置当前的日期时间(就像我在谷歌搜索时那样),使用这种方式
$table->dateTime('signed_when')->useCurrent();
这就是你怎么做的,我已经检查过了,它在我的Laravel 4.2上工作。
$table->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
希望这能有所帮助。
我在Laravel中使用以下自定义:
默认created_at为当前时间戳 更新记录时更新时间戳
首先,我将在Laravel的根目录下创建一个helpers.php文件,并插入以下内容:
<?php
if (!function_exists('database_driver')) {
function database_driver(): string
{
$connection = config('database.default');
return config('database.connections.' . $connection . '.driver');
}
}
if (!function_exists('is_database_driver')) {
function is_database_driver(string $driver): bool
{
return $driver === database_driver();
}
}
在作曲家。json,我将插入以下到自动加载。这允许编写器自动发现helpers.php。
"autoload": {
"files": [
"app/Services/Uploads/Processors/processor_functions.php",
"app/helpers.php"
]
},
我在Laravel模型中使用以下方法。
if (is_database_driver('sqlite')) {
$table->timestamps();
} else {
$table->timestamp('created_at')->default(\DB::raw('CURRENT_TIMESTAMP'));
$table->timestamp('updated_at')
->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP'));
}
这允许我的团队继续使用sqlite进行单元测试。ON UPDATE CURRENT_TIMESTAMP是MySQL的快捷方式,在sqlite中不可用。