Laravel updateTimestamps方法不必要的检查?

时间:2018-06-20 07:53:44

标签: php laravel

挖出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);
    }
}

Source

该方法提取新的时间戳,并尝试同时更新created_atupdated_at。但是,在if语句中进行的检查对我来说没有意义。

  1. 为什么我们必须检查static::UPDATED_AT / static::CREATED_AT是否不为空?它在使用此特性的Model类上定义为const(即使在没有static::UPDATED_ATstatic::CREATED_AT的情况下,也没有在其他地方使用它,整个特性完全不起作用,因此没有首先要使用它)

  2. 为什么我们要检查列是否不脏?我认为列是否脏都没有关系。因为更新是更新,对updateTimestamps()的“最新鲜”调用应该“获胜”,在这里不是这种情况,因为以后的调用将被忽略(因为该列已经脏了)

那么为什么要进行这些检查?

1 个答案:

答案 0 :(得分:1)

1)您的表上可能没有updated_at类型的字段。那么就没有理由雄辩地尝试设置该字段了,它需要一种知道不这样做的方法... static::UPDATED_AT == null

您可能想要一个updated_at类型的字段,而不想要created_at类型的字段...所以与该示例相反。

2)检查是否脏,因此您可以直接设置这些字段。也许我想将这些字段之一设置为特定值,而不是将时间戳自动设置为now