Laravel 中的自定义时间戳

Custom Timestamps in Laravel

我想在我的table的某些列中保留更改的时间记录。如何在数据库中获取和保存时间戳值?我正在尝试按照以下方式进行操作,但总是在 col_edited_at 列中获得 0000-00-00 00:00:00。

$case->col_edited_at = time();
$case->save();

MySQL 时间戳字段默认需要格式 0000-00-00 00:00:00。如果你只是想存储像 time() 返回的 unix 风格的 "seconds since the epoch" 时间戳,使用整数字段,或者使用:

$case->col_edited_at = date('Y-m-d H:i:s');
$case->save();

只需使用

date('Y-m-d H:i:s') 而不是 time()

其他答案是正确的,但我有一个更优雅的解决方案。因此您不必再考虑设置时间戳。将其添加到您的模型中,如果您更改列,它将刷新 col_edited_at 字段:

public static function boot(){
    parent::boot();

    static::saving(function($model){
        if($model->isDirty('col')){
            $model->col_edited_at = Carbon::now();
        }
    });
}

因此,当模型被保存并且 col 变脏(意味着它已更改)时,时间戳将设置为当前时间。

用法:

$model = MyModel::find(1);
$model->col = 'foo';
$model->save();