2014-02-13 39 views
2

我有一個表,並且我想添加 - > unsigned()到id。目前,遷移看起來像:$table->increments('id');添加遷移到設置整數到無符號

所以我想做一個新的遷移,將其設置爲無符號,但沒有太多的文件來做到這一點。這是正確的方法:

public function up() 
{ 
    Schema::table('authors', function($t) { 
     $t->unsigned('id', 'authors_id_unsigned'); 
    }); 
} 


public function down() 
{ 
    Schema::table('authors', function($t) { 
      $t->dropUnsigned('authors_id_unsigned'); 
    }); 
} 

我只是在這裏猜測,因爲我無法在文檔中找到它。

+0

我覺得你不能輕易地編輯一個字段。我認爲你必須刪除並重新創建(顯然以某種方式備份其過程中的內容)。你可能會發現,如果你包含doctrine/dbal包,你可以做更多的事情(比如重命名列),但我仍然認爲你不會影響列的類型。這就是說,我沒有試圖做到這一點。 – alexrussell

+0

啊,好的。這實際上是有道理的,你不能像這樣改變列。 – babbaggeii

回答

5

您無法使用架構生成器更改那種細節。

要更改它,您必須運行原始查詢。要做到這一點,您應該遷移看起來是這樣的:

public function up() 
{ 
    Schema::table('authors', function($t) { 
     DB::statement("ALTER TABLE `authors` CHANGE COLUMN `id` `id` INT(11) UNSIGNED NOT NULL AUTO_INCREMENT FIRST"); 
    }); 
} 


public function down() 
{ 
    Schema::table('authors', function($t) { 
     DB::statement("ALTER TABLE `authors` CHANGE COLUMN `id` `id` INT(11) NOT NULL AUTO_INCREMENT FIRST"); 
    }); 
} 
4

可以在Laravel 5+修改列,但你必須教義/ DBAL依賴添加到您的composer.json文件。

public function up() 
{ 
    Schema::table('my_table', function (Blueprint $table) { 
     $table->integer('my_column')->unsigned()->change(); 
    }); 
} 

public function down() 
{ 
    Schema::table('my_table', function (Blueprint $table) { 
     $table->integer('my_column')->change(); 
    }); 
} 
+0

你是男人! –