首页 > 解决方案 > 自定义时间戳在 $model->save() 上复制 updated_at

问题描述

我有一个具有自定义时间戳的表和相关模型。迁移设置如下:

Schema::create('tests', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->timestamp('expire_at');
    $table->timestamps();
});

我已经像这样设置了我的模型:

class Test {
    protected $dates = [
       'expire_at'
    ];
}

当我尝试仅更新名称字段时,它将字段设置expire_at为与字段相同,updated_at而不是简单地不更改它。

$test = Test::find(1);
$test->name = "Changed Value";

// Until here, the expire_at timestamp has its true value
// but on save(), it changes expire_at to updated_at time.

$test->save();

我在protected $dates使用上有什么问题吗?

标签: laravellaravel-5eloquenttimestamp

解决方案


您需要使列可以为空(或删除默认值,CURRENT_TIMESTAMP):

$table->timestamp('expire_at')->nullable();

推荐阅读