1

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

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

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

4

1 回答 1

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();
 }
于 2013-10-22T09:27:34.263 回答