CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP
Laravel Schema Builder/Migrations を使用して、デフォルト値のタイムスタンプ列を作成したいと考えています。Laravel のドキュメントを何度か読みましたが、これをタイムスタンプ列のデフォルトにする方法がわかりません。
この関数は、作成する両方の列timestamps()
のデフォルトを作成します。0000-00-00 00:00
created_at
とupdated_at
列の両方を作成するには:
$t->timestamp('created_at')->default(DB::raw('CURRENT_TIMESTAMP'));
$t->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP on update CURRENT_TIMESTAMP'));
複数の列を持つには、MySQL バージョン >= 5.6.5 が必要です。CURRENT_TIMESTAMP
2015-12-02 にタグ付けされた Laravel 5.1.26 以降、useCurrent()
修飾子が追加されました。
Schema::table('users', function ($table) {
$table->timestamp('created')->useCurrent();
});
PR 10962 (コミット 15c487feが続く) により、この追加が行われました。
関心のあるissue 3602と11518も読みたいと思うかもしれません。
基本的に、MySQL 5.7 (デフォルト構成) では、時間フィールドにデフォルト値または nullable を定義する必要があります。
代わりにPaulo Freitas の提案を使用してください。
Laravel がこれを修正するまでは、実行後に標準のデータベース クエリを実行できますSchema::create
。
Schema::create("users", function($table){
$table->increments('id');
$table->string('email', 255);
$table->string('given_name', 100);
$table->string('family_name', 100);
$table->timestamp('joined');
$table->enum('gender', ['male', 'female', 'unisex'])->default('unisex');
$table->string('timezone', 30)->default('UTC');
$table->text('about');
});
DB::statement("ALTER TABLE ".DB::getTablePrefix()."users CHANGE joined joined TIMESTAMP DEFAULT CURRENT_TIMESTAMP NOT NULL");
それは私にとって驚異的に機能しました。
Laravel 5 では単純に:
$table->timestamps(); //Adds created_at and updated_at columns.
ドキュメント: http://laravel.com/docs/5.1/migrations#creating-columns