Laravel的Eloquent可以更新创建时间而不是更新时间吗?

时间:2015-10-05 19:57:39

标签: laravel timestamp eloquent

我现在正在学习Laravel和Eloquent,并且已经设置了一些初步的迁移。我的一个表只需要一个创建时间,因为一旦插入一行,它就永远不会更新:

    // The run table only needs a creation timestamp, not an updated timestamp
    Schema::create('runs', function (Blueprint $table) {
        $table->increments('id');
        $table->timestamp('created_at');
    });

我了解默认情况下,Eloquent要求created_atupdated_at列都存在,并且此功能可以完全关闭。从手册:

  

默认情况下,Eloquent希望您的表上存在created_at和updated_at列。如果您不希望Eloquent自动管理这些列,请将模型上的$timestamps属性设置为false。

但是,是否可以要求Eloquent自动设置创建时间而不是更新时间?我意识到我可以手动执行此操作,但如果Eloquent可以“免费”执行此操作,那就太好了。

2 个答案:

答案 0 :(得分:2)

简答:不。

我查看了处理时间戳的framework/src/Illuminate/Database/Eloquent/Model.php,但这不是直接可能的。

您可以覆盖一堆方法使其正常工作:

  • public function setUpdatedAt($value)
  • 在任何地方引用static::UPDATED_AT
  • 取决于usesTimestamps()
  • 值的任何地方
  • 当然还有其他地方

充其量,这很容易受到未来代码更改的影响,所以我不推荐它。

答案 1 :(得分:0)

您可以使用

$model->touch();