2013-10-21 255 views
1

我正在使用Laravel的遷移來創建一些數據庫表,我想知道是否有可能創建DATETIME列而不是TIMESTAMP。我使用的代碼如下:在Laravel中更改created_at和updated_at的格式4

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

我知道我可以更改日期,回來在我的模型使用屬性的格式,但是我想他們如果可能的話要DATETIME在我的數據庫。

+0

你爲什麼喜歡'DATETIME'?我通常更喜歡'TIMESTAMP',因爲它是時區感知的。 – eggyal

+0

@eggyal,你已經倒退了; 'DATETIME'包含時區信息,'TIMESTAMP'始終保存爲UTC。 –

+0

@BillKarwin:據我所知,'DATETIME'根本不存儲任何時區信息?通過說'TIMESTAMP'是'時區意識',我的意思是它在會話'time_zone'(在客戶端)和UTC(用於存儲)之間轉換。 – eggyal

回答

1

我在源代碼中做了一些挖掘,並且時間戳的類型是硬編碼的,因此您不能僅將其重新配置爲DateTime

我認爲更好的辦法是爲你創建自己的列(不使用時間戳()) ,然後在你的模型,你可以這樣做:

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); 

,你也可以嘗試可能重寫Blueprint類的timestamp()功能,但沒有保證,這不會弄亂Laravel代碼中的其他地方,BEC澳洲英語它採用碳處理日期等..

class MyBlueprint extends Blueprint 
{ 
     public function timestamp($column) 
     { 
       return $this->addColumn('dateTime', $column); 
     } 
} 

然後定義你的表結構時的遷移使用MyBlueprint:

Schema::create('users', function(MyBlueprint $table) { 
    // code 
    $this->timestamps(); 
} 
相關問題