2017-07-11 91 views
2

當我genarate在Laravel遷移時,它會自動看起來是這樣的:如何更改Laravel中自動生成的遷移頁面?

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

但我要工作更方便,我想讓數據庫句柄,當我創建和更新,而不是做自己的行每次。 我發現了一個方法,使這成爲可能是這樣的:

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

但現在每次我做一個移民,我必須手動改變這一點,我不認爲這是非常方便的。有人知道我可以如何更改Laravel中自動生成的遷移?

+0

Eloquent默認管理這些字段,除非您對模型做了一些奇怪的事情。你什麼意思你必須每次都自己做? – Bytewave

+0

@Bytewave默認情況下,我希望能夠在遷移時擁有created_at和updated_at的那兩行,但目前的默認值是$ time-> timestamps() –

回答

2

如果您在源代碼周圍挖你會發現:

  1. 有一個在框架調用create.stub文件。
  2. 該文件被MigrationCreator用於遷移。

原則上,您可以執行以下操作:

  1. 抓住內置的遷移文件,並在您的項目將其移動到另一個文件夾(如resouces /存根可能)請注意,您應該複製即使您不會修改它們,也可以使用該文件夾中的其他存根。

  2. 然後,覆蓋默認的遷移創建者使用此文件來代替,這應該工作:

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

然後在你的應用服務提供商,你可以這樣做:

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

這將(希望)「欺騙」laravel使用您的遷移創建者而不是默認的遷移創建者。然而,創建表格並不是經常發生的事情來證明所有這些麻煩。

更新:它應該擴展遷移創建者。

相關問題