Laravel Schema:Null默认值,更新时间戳

时间:2017-03-14 09:29:19

标签: php mysql laravel

我刚开始与Laravel合作,所以我已经习惯了如何完成任务。

我一直在尝试做一些我似乎无法找到在线示例的事情。我正在使用“架构”构建器来创建新表。

我想要的是一个日期时间字段,其默认值为NULL,但要“ON UPDATE CURRENT_TIMESTAMP”。

我尝试了很多东西,但这是我最近的尝试:

$table->dateTime('opened_on')->default(Capsule::raw('NULL ON UPDATE CURRENT_TIMESTAMP'));

使用此代码,我得到“open_on'的默认值无效”错误。

任何反馈或建议都将不胜感激。

5 个答案:

答案 0 :(得分:6)

我通常使用此语法进行迁移:

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

答案 1 :(得分:1)

在laravel中使用->timestamps()

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

Set Default null database table

ALTER TABLE tbl MODIFY `opened_on` DATE DEFUALT NULL;

您必须通过migration in laravel

创建数据库表

答案 2 :(得分:0)

不要重新发明轮子并使用内置的Laravel功能。只需添加->timestamps()即可创建created_atupdated_at列。当您使用Eloquent更新数据时,Laravel会将当前日期和时间设置为updated_at列。此外,updated_at将自动转换为Carbon实例。

https://laravel.com/docs/5.4/eloquent#eloquent-model-conventions(查看时间戳部分)

答案 3 :(得分:0)

对我来说,默认情况下创建一个设置为NULL的日期时间字段更容易,然后更新PHP中的时间戳而不是让MySQL这样做。

答案 4 :(得分:0)