Laravel在更新时更改created_at

Ska*_*tch 12 php laravel eloquent laravel-5 laravel-5.2

我在这个问题上找到了这个答案,但它对我不起作用.

所以,我在数据库中创建了一个条目:

// Write lead to database
$lead = Lead::create($lead_data);
Run Code Online (Sandbox Code Playgroud)

时间戳看起来像这样,这很好:

| 2016-01-08 10:34:15 | 2016-01-08 10:34:15 |
Run Code Online (Sandbox Code Playgroud)

但后来我向外部服务器发出请求,我需要更新行:

$lead->user_id = $response['user_id'];
$lead->broker_id = $response['broker_id'];
$lead->save();
Run Code Online (Sandbox Code Playgroud)

并且created_at字段已更改:

| 2016-01-08 04:34:17 | 2016-01-08 10:34:17 |
Run Code Online (Sandbox Code Playgroud)

我该如何解决这个问题?

编辑

我需要一个只修改行为而不删除列或重置迁移的解决方案.必须在实时数据库上执行此修复,而不触及数据.如下所示,我尝试了以下迁移:

$table->datetime('created_at')->default(DB::raw('CURRENT_TIMESTAMP'))->change();
Run Code Online (Sandbox Code Playgroud)

但没有任何反应.created_at字段在更新时仍会被修改.

pat*_*cus 24

如果您使用的是Laravel 5.2并使用MySQL,那么时间戳会引入一些"错误".你可以在这里阅读关于github的所有问题.它与时间戳默认值有关,并且MySQL在某些条件下自动分配DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性.

基本上,您有三种选择.

  1. 更新MySQL变量:

如果将explicit_defaults_for_timestamp变量设置为TRUE,则不会自动为时间戳列分配DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性.您可以在此处阅读有关变量的更多信息.

  1. 使用可空时间戳:

更改$table->timestamps()$table->nullableTimestamps().默认情况下,该$table->timestamps()命令会创建不可为空的时间戳字段.通过使用$table->nullableTimestamps(),您的时间戳字段将是可空的,并且MySQL不会自动为第一个分配DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性.

  1. 自己定义时间戳:

而不是使用$table->timestamps,使用$table->timestamp('updated_at'); $table->timestamp('created_at');自己.确保'updated_at'字段是表中的第一个时间戳,以便它自动分配DEFAULT CURRENT_TIMESTAMP或ON UPDATE CURRENT_TIMESTAMP属性.