2017-08-07 62 views
0

我有幾個表,我需要tinyint字段必須是unsigned並設置爲auto_incrementLaravel 5.3:自動遞增無符號TINYINT

L5.3 Database : Migrations documentation有一個方法來定義unsigned auto-incrementing tinyint。我試圖用DB::update()來實現它。爲表我的遷移文件看起來像:

public function up() 
{ 
    Schema::create('table_name', function (Blueprint $table) 
    { 
     $table->unsignedTinyInteger('field1'); 
     $table->string('field2', 255); 
     $table->primary('field1'); 
     $table->index('field2'); 

     $field = "field1"; 
    }); 

    $this->addAutoIncrements($field);  

} 

public function addAutoIncrements($field) 
{ 
    DB::update('ALTER TABLE table_name MODIFY $field TINYINT UNSIGNED NOT NULL AUTO_INCREMENT'); 
} 

當我嘗試php artisan migrate這樣的遷移文件,它遷移沒有任何錯誤,但不分配auto-increment

我該如何解決這個問題?我應該將更新作爲完整的新遷移來完成嗎?有沒有人做過?

+0

'$ table-> unsignedTinyInteger('field1') - >增量();' – Ali

+0

@Ali:這是我第一次嘗試。沒有工作。 –

回答

2

unsignedTinyInteger()方法的第二個參數是一個布爾值,用於標記它是否爲自動增量字段。它默認爲false,所以您只需更新您的遷移即可通過true

$table->unsignedTinyInteger('field1', true); 

作爲未來的一個說明,在Laravel 5.4.16添加了tinyIncrements()方便的方法來這樣做。

+0

不得不把'$ table-> primary('field1')'作爲'unsignedTinyInteger('field1',true)'來處理它。 –