2015-10-05 82 views
0

我目前正在学习Laravel和Eloquent,并且已经设置了一些最初的迁移来玩。我的一个表只需要创建时间,因为一旦插入某一行的存在,它永远不会被更新:Laravel的雄辩可以更新创建时间,但不是更新时间吗?

// 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'); 
    }); 

我明白,能言善辩的默认预计既是created_atupdated_at列存在,并且该功能可以完全关闭。从手册:

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

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

+0

[一个简单的解决方案](http://stackoverflow.com/q/18067614),我现在正在使用的是在数据库级别设置默认列值,并关闭Eloquent中的时间戳记功能。 – halfer

回答

1

简答:没有。

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

你可以重写一堆的方法,使其工作:

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

充其量,这将是脆弱的适用于未来的代码更改,所以我不推荐它。

+0

一个很好的直接答案,谢谢!没问题 - 我会坚持使用手动方法。 – halfer