在Laravel 4中更改created_at和updated_at的格式

时间:2013-10-21 22:11:08

标签: php mysql laravel-4

我正在使用Laravel的迁移来创建一些数据库表,我想知道它是否可以创建DATETIME列而不是TIMESTAMP列。我正在使用的代码如下:

$table->increments('id');
$table->string('name', 255);
$table->bigInteger('size');
$table->dateTime('downloaded_at');
$table->timestamps();

我知道我可以使用模型中的属性更改日期返回的格式,但是如果可能的话,我希望它们在我的数据库中为DATETIME

1 个答案:

答案 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();
 }