【问题标题】:Eloquent update method change created_at timestampEloquent 更新方法更改 created_at 时间戳
【发布时间】:2016-04-01 10:42:13
【问题描述】:

我正在使用 Eloquent 进行数据库处理,当我使用更新方法 created_at 更新记录时,时间戳被更改如何防止这种情况发生?

$post = Post::update([
   'name' => $name
]);

updated_at 时间戳工作正常

【问题讨论】:

  • 您要更新所有帖子吗?您正在更新的记录的created_at 的初始值是多少?
  • 不,我正在更新某些记录,但仅用于演示,初始值为 2015-12-23 00:24:53 更新后 2015-12-27 05:29:59

标签: sql database laravel eloquent


【解决方案1】:

如果您的模型中没有任何自定义设置。您可以像这样更新记录:

$id = 5; // here put id of record you want to update
$post = Post::findOrFail($id);
$post->name = $name;
$post->save();

仅使用此代码应更新name 和updated_at 时间戳(而不是created_at)。如果created_at 也更新了,则意味着您可能有一些自定义模型设置或:

  • 您的数据库触发器可能会在记录更新时更改 created_at
  • 您可能注册了一些在记录更新时会更改 created_at 的事件
  • 确保您在数据库中posts 表中的created_at 字段未定义为CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP - 这样每当您更新记录时,created_at 也将更新为当前日期时间

您还应该确保您的Post 模型没有这样的东西:

const UPDATED_AT = 'created_at';

如果还可以解释为什么在您更新记录时会更改 created_at。

【讨论】:

  • 同样的事情。这是我的模型 `code' class Post extends Eloquent { protected $table = 'posts'; protected $fillable = ['name', 'name_arabic', 'tags', 'tags_arabic', 'category', 'category_arabic', 'content', 'content_arabic', 'post_thumb', 'draft' ];
  • 所以正如我所说,您需要在 Laravel 中验证数据库触发器和其他操作,因为简单更新不会更新 created_at 列。请确保数据库中的created_at 列也只是时间戳,而不在记录更新时设置CURRENT_TIMESTAMP - 你不应该有这样的CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
  • @user3266289 你能说出具体的问题吗?
  • created_at 字段设置为在我的数据库中更新 CURRENT_TIMESTAMP
  • @user3266289 谢谢,有时最后的猜测是最好的;)
猜你喜欢
  • 2015-06-14
  • 2013-10-05
  • 1970-01-01
  • 2014-12-23
  • 1970-01-01
  • 2016-04-19
  • 2015-08-30
  • 2016-04-12
  • 1970-01-01
相关资源
最近更新 更多