挖出laravel的来源,我发现了这种方法:
protected function updateTimestamps()
{
$time = $this->freshTimestamp();
if (! is_null(static::UPDATED_AT) && ! $this->isDirty(static::UPDATED_AT)) {
$this->setUpdatedAt($time);
}
if (! $this->exists && ! is_null(static::CREATED_AT) &&
! $this->isDirty(static::CREATED_AT)) {
$this->setCreatedAt($time);
}
}
该方法提取新的时间戳,并尝试同时更新created_at
和updated_at
。但是,在if语句中进行的检查对我来说没有意义。
为什么我们必须检查static::UPDATED_AT
/ static::CREATED_AT
是否不为空?它在使用此特性的Model类上定义为const
(即使在没有static::UPDATED_AT
和static::CREATED_AT
的情况下,也没有在其他地方使用它,整个特性完全不起作用,因此没有首先要使用它)
为什么我们要检查列是否不脏?我认为列是否脏都没有关系。因为更新是更新,对updateTimestamps()
的“最新鲜”调用应该“获胜”,在这里不是这种情况,因为以后的调用将被忽略(因为该列已经脏了)
那么为什么要进行这些检查?
答案 0 :(得分:1)
1)您的表上可能没有updated_at
类型的字段。那么就没有理由雄辩地尝试设置该字段了,它需要一种知道不这样做的方法... static::UPDATED_AT == null
您可能想要一个updated_at
类型的字段,而不想要created_at
类型的字段...所以与该示例相反。
2)检查是否脏,因此您可以直接设置这些字段。也许我想将这些字段之一设置为特定值,而不是将时间戳自动设置为now
。