触摸模型的时间戳而不实际更新模型


Touching the timestamp of models without actually updating the model

有很多问题询问如何在没有更改任何内容的情况下防止updated_at列更改。事实上,这甚至被修复为一个bug。

然而,我想做的正好相反。我希望将updated_at列更新为当前时间戳,尽管没有更改任何内容。如果你愿意的话,我想对我的模型进行touch

$ touch MyLaravelModel

是否有一个简单的方法来做这样的事情在Laravel?相当于$model->touch()的东西,而不是手动编辑字段?

我已经试过了,但是什么都没有发生。

$model = Model::find(1);
$model->save();

我这样做的原因是因为我想使用updated_at列来跟踪模型最后一次"查看"的时间,而不必改变它。有更好的办法吗?

这与触摸父时间戳不同,因为在这种情况下,我的模型不属于父节点,也没有任何子节点

您可以使用touch()方法。它在Model抽象类中,至少从v4.0开始就存在了。

在这里:

/**
 * Update the model's update timestamp.
 *
 * @return bool
 */
public function touch()
{
    $this->updateTimestamps();
    return $this->save();
}

像这样使用:

$model->touch();

我相信您可以执行myObject->save(),这将更新当前对象的updated_at字段,即使没有任何更改。假设它是一个用户:

$myUser = User::find(1);
$myUser->save()

我相信这仍然会更新updated_at。