2014-02-19 3 views
14

Ich habe eine Tabelle hinzuzufügen, die eine ENUM-Feld enthältwie kann ich eine Migration schaffen Wert auf eine Enum in beredten

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

wie kann ich eine Migration erstellen einen Wert an das Enum Feld hinzufügen?

+0

Die Lehre docs etwas über ENUMs zu sagen haben und warum sie nicht so gut unterstützt: http://docs.doctrine-project.org/projects/doctrine -orm/de/latest/cookbook/mysql-enums.html – cweiske

Antwort

36

Laravel bietet keine Methoden zum Aktualisieren einer Enum-Spalte. Sie können die Spalte löschen und neu erstellen, aber Sie könnten während des Vorgangs Daten verlieren und es ist nicht wirklich sauber.

In diesem Fall denke ich, dass die beste Wahl rohe SQL in eine Migration zu schreiben ist:

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

Ich habe einen Fehler in der SQL-Syntax gemacht haben könnte, habe ich nie verwendet ENUM, aber Sie kann die Idee trotzdem sehen.

+4

Beachten Sie, dass Sie mit dieser Lösung nur Datenbanken unterstützen können, die den ENUM-Typ unterstützen. Beispielsweise wird das Ausführen von Tests mit SQLite unterbrochen. –

1

ich es mit MySql tat:

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

    } 
} 
Verwandte Themen