2017-07-11 2 views
2

Wenn ich eine Migration in Laravel genarate, sieht es automatisch wie folgt aus:Wie ändere ich die automatisch generierte Migrationsseite in Laravel?

public function up() 
{ 
    Schema::create('comments', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamps(); 
    }); 
} 

Aber ich will bequemer arbeiten, ich möchte die Datenbank-Handle lassen, wenn ich mich zu erstellen und aktualisieren es eine Reihe anstatt das zu tun jedes Mal. fand ich einen Weg, um dies möglich, so zu machen:

public function up() 
{ 
    Schema::create('comments', function (Blueprint $table) { 
     $table->increments('id'); 
     $table->timestamp('created_at')->useCurrent(); 
     $table->timestamp('updated_at')->default(DB::raw('CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP')); 
    }); 
} 

Aber jetzt jedes Mal mache ich eine Migration, ich dies manuell ändern muß, und ich glaube nicht, dass es sehr bequem ist. Weiß jemand, wie ich die automatisch generierte Migration in Laravel ändern kann?

+0

Eloquent verwaltet diese Felder standardmäßig, es sei denn, Sie machen etwas seltsames mit Ihren Modellen. Was meinst du damit, dass du es jedes Mal selbst machen musst? – Bytewave

+0

@Bytewave Ich möchte in der Lage sein, diese beiden Zeilen der created_at und der updated_at in einer Migration standardmäßig zu haben, aber das Standard-Kommando ist $ time-> timestamps() –

Antwort

2

Wenn Sie in den Quellcode wühlen werden Sie feststellen, dass:

  1. Es gibt eine Datei create.stub im Rahmen genannt. Diese Datei wird von der MigrationCreator verwendet, um Migrationen durchzuführen.

Prinzipiell können Sie wie folgt vorgehen:

  1. greifen die integrierte Migrations Datei und es in einem anderen Ordner in Ihrem Projekt bewegen (zB resouces/Stubs wahrscheinlich) Beachten Sie, dass Sie sollten die kopieren andere Stubs in diesem Ordner, auch wenn Sie sie nicht ändern.

  2. Dann die Standardmigration Schöpfer außer Kraft setzen diese Datei stattdessen zu verwenden, sollte diese Arbeit:

    class MyMigrationCreator extends MigrationCreator { 
         protected function stubPath() { 
          return base_path("resources"); //Or something valid   
         } 
    } 
    

Dann in Ihrem Provider Application Service Sie tun können:

$this->app->instance(MigrationCreator::class, resolve(MyMigrationCreator::class)); 

Diese wird (hoffentlich) laravel dazu bringen, Ihren Migrations-Ersteller als den Standard-Ersteller zu verwenden. Das Erstellen von Tabellen ist jedoch nicht so häufig, um all diese Probleme zu rechtfertigen.

Update: Es sollte den Migrationsersteller erweitern.

Verwandte Themen