Laravel的雄辩可以更新创建时间,但不是更新时间吗?
问题描述:
我目前正在学习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_at
和updated_at
列存在,并且该功能可以完全关闭。从手册:
默认情况下,Eloquent预期created_at和updated_at列存在于您的表上。如果您不希望通过Eloquent自动管理这些列,请将模型上的
$timestamps
属性设置为false。
但是,是否可以要求雄辩自动设置创建时间而不是更新时间?我意识到我可以手动执行此操作,但如果Eloquent可以“免费”执行此操作,那将会很好。
答
简答:没有。
我看看framework/src/Illuminate/Database/Eloquent/Model.php
它处理时间戳,它不是直接可能的。
你可以重写一堆的方法,使其工作:
public function setUpdatedAt($value)
- 任何地方有到
static::UPDATED_AT
- 任何地方的引用取决于
usesTimestamps()
- ,当然其他地方的价值
充其量,这将是脆弱的适用于未来的代码更改,所以我不推荐它。
+0
一个很好的直接答案,谢谢!没问题 - 我会坚持使用手动方法。 – halfer
[一个简单的解决方案](http://stackoverflow.com/q/18067614),我现在正在使用的是在数据库级别设置默认列值,并关闭Eloquent中的时间戳记功能。 – halfer