2014-02-19 41 views
14

枚舉我有一個包含一個枚舉場我怎樣才能創建一個遷移到一個值添加到雄辯

CREATE TABLE `user_status` (
    `id` int(10) unsigned NOT NULL AUTO_INCREMENT, 
    `values` enum('on', 'off'), 
    PRIMARY KEY (`id`), 
) ENGINE=InnoDB; 

我怎樣才能創建一個遷移到一個值添加到枚舉字段的表?

+0

學說文檔有話要說關於枚舉,爲什麼他們是不是那麼好支持:http://docs.doctrine-project.org/projects/doctrine -orm/en/latest/cookbook/mysql-enums.html – cweiske

回答

36

Laravel不提供更新枚舉列的方法。您可以刪除並重新創建該列,但在操作過程中可能會丟失數據,並且它不是真正的清潔

在這種情況下,我認爲最好的選擇是寫入原始SQL到遷移:

public function up() 
{ 
    DB::statement("ALTER TABLE user_status MODIFY COLUMN values ENUM('on','off','unknown')"); 
} 

public function down() 
{ 
    DB::statement("ALTER TABLE user_status MODIFY COLUMN values ENUM('on','off')"); 
} 

我可以在SQL語法犯了一個錯誤,我從來沒有使用ENUM,但你無論如何可以看到這個想法。

+4

請注意,您只能使用此解決方案支持支持ENUM類型的數據庫。例如,使用SQLite運行測試將會中斷。 –

1

我與MySQL做到了:

class ChangeJobTypeEnum extends Migration { 

    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     DB::statement("ALTER TABLE _TABLENAME_ CHANGE _COLUMNNAME_ _COLUMNNAME_ ENUM('on', 'off', 'auto')"); 

    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     DB::statement("ALTER TABLE _TABLENAME_ CHANGE _COLUMNNAME_ _COLUMNNAME_ ENUM('on', 'off')"); 

    } 
} 
相關問題