当前位置:  开发笔记 > 编程语言 > 正文

Laravel在更新时更改created_at

如何解决《Laravel在更新时更改created_at》经验,为你挑选了1个好方法。

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

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

// Write lead to database
$lead = Lead::create($lead_data);

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

| 2016-01-08 10:34:15 | 2016-01-08 10:34:15 |

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

$lead->user_id = $response['user_id'];
$lead->broker_id = $response['broker_id'];
$lead->save();

并且created_at字段已更改:

| 2016-01-08 04:34:17 | 2016-01-08 10:34:17 |

我该如何解决这个问题?

编辑

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

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

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



1> patricus..:

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

基本上,您有三种选择.

    更新MySQL变量:

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

    使用可空时间戳:

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

    自己定义时间戳:

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

推荐阅读
mobiledu2402852357
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有