我正在使用Laravel的迁移来创建一些数据库表,我想知道它是否可以创建DATETIME
列而不是TIMESTAMP
列。我正在使用的代码如下:
$table->increments('id');
$table->string('name', 255);
$table->bigInteger('size');
$table->dateTime('downloaded_at');
$table->timestamps();
我知道我可以使用模型中的属性更改日期返回的格式,但是如果可能的话,我希望它们在我的数据库中为DATETIME
。
答案 0 :(得分:1)
我在源代码中进行了一些挖掘,时间戳的类型是硬编码的,因此您不能将其重新配置为DateTime
。
我认为更好的方法是创建自己的列(不使用timestamps()) 然后在你的模型中你可以这样做:
public class User extends Eloquent
{
public function save()
{
$this->attributes['created_at'] = new DateTime;
return parent::save();
}
}
另一种方法是使用ModelObservers
class UserObserver {
public function saving($model)
{
//
}
}
User::observe(new UserObserver);
你也可以尝试覆盖timestamp()
类的Blueprint
函数,但不能保证这不会在代码中的其他地方弄乱Laravel,因为它使用Carbon来处理约会等...
class MyBlueprint extends Blueprint
{
public function timestamp($column)
{
return $this->addColumn('dateTime', $column);
}
}
然后在为迁移定义表结构时使用MyBlueprint:
Schema::create('users', function(MyBlueprint $table) {
// code
$this->timestamps();
}