gpt4 book ai didi

php - Laravel 在更新时更改了created_at

转载 作者:行者123 更新时间:2023-12-03 00:43:24 26 4
gpt4 key购买 nike

我找到了this answer关于这个主题,但它对我不起作用。

因此,我在数据库中添加了一个条目:

// 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 字段仍然会被修改。

最佳答案

如果您使用 Laravel 5.2 并使用 MySQL,则时间戳会引入一些“错误”。您可以在 github here 上阅读有关该问题的所有内容。 。它与时间戳默认值有关,MySQL 在某些条件下自动分配 DEFAULT CURRENT_TIMESTAMP 或 ON UPDATE CURRENT_TIMESTAMP 属性。

基本上,您有三个选择。

  1. 更新 MySQL 变量:

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

  • 使用可为空的时间戳:
  • $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 属性的字段。

    关于php - Laravel 在更新时更改了created_at,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34673729/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com