213

CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMPLaravel Schema Builder/Migrations を使用して、デフォルト値のタイムスタンプ列を作成したいと考えています。Laravel のドキュメントを何度か読みましたが、これをタイムスタンプ列のデフォルトにする方法がわかりません。

この関数は、作成する両方の列timestamps()のデフォルトを作成します。0000-00-00 00:00

4

11 に答える 11

59

created_atupdated_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

于 2014-01-06T04:27:53.007 に答える
53

2015-12-02 にタグ付けされた Laravel 5.1.26 以降、useCurrent()修飾子が追加されました。

Schema::table('users', function ($table) {
    $table->timestamp('created')->useCurrent();
});

PR 10962 (コミット 15c487feが続く) により、この追加が行われました。

関心のあるissue 360​​211518も読みたいと思うかもしれません。

基本的に、MySQL 5.7 (デフォルト構成) では、時間フィールドにデフォルト値または nullable を定義する必要があります。

于 2015-12-08T05:33:39.867 に答える
9

代わりに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");

それは私にとって驚異的に機能しました。

于 2013-08-24T17:07:29.303 に答える
-5

Laravel 5 では単純に:

$table->timestamps(); //Adds created_at and updated_at columns.

ドキュメント: http://laravel.com/docs/5.1/migrations#creating-columns

于 2015-12-10T01:11:14.793 に答える