2016-07-10 15 views
1

Ich habe einen User-Tisch in meiner DB:Was ist der beste Weg, um einen Spaltentyp in der Laravel-Migration zu ändern?

 $table->increments('id'); 
     $table->string('fullName'); 
     $table->string('email')->unique(); 
     $table->string('password', 50); 
     $table->enum('role',['boss','employee','customer'])->default('customer'); 
     $table->rememberToken(); 
     $table->timestamps(); 

ich brauche ‚Rolle‘ Spalte Typen ‚Text‘ und laufen in Laravel die neue Migration danach, zu ändern. Wenn ich keine Auswirkungen auf vorherige Daten haben möchte, was ist der beste Weg, dies zu tun?

Antwort

2

Sie könnten versuchen:

  1. Erstellen Sie eine neue Textspalte namens „roleTemp“
  2. Führen Sie eine Abfrage in dieser Spalte für jeden Datensatz zu setzen - auf der Grundlage der „Rolle“ -Spalte
  3. Entfernen Sie die "Rolle" Spalte
  4. Rename "roleTemp" auf "Rolle"

Jetzt einfach Ihr Datenbankschema ändern wie:

$table->increments('id'); 
$table->string('fullName'); 
$table->string('email')->unique(); 
$table->string('password', 50); 
$table->string('role'); 
$table->rememberToken(); 
$table->timestamps(); 

Grundsätzlich duplizieren Sie die Rollenwerte in eine (temporäre) Spalte und benennen Sie sie um. Zumindest ist es sicher und wird nicht viel Zeit in Anspruch nehmen.

2

Es ist so einfach wie folgt, erstellen Sie eine neue Migration mit dieser einen Zeile. Beachten Sie die ->change()-Funktion, die es eine ALTER-Abfrage macht.

Schema::table('usertable', function (Blueprint $table) { 
    $table->string('role')->default('author')->change(); 
}); 

Denken Sie daran, die Größe für string() ist standardmäßig 255, und wenn Ihr Enum-Wert größer als das ist, wird es den ENUM-Wert auf 255 Zeichen abgeschnitten.

Update: Sie müssen doctrine/dbal für diese Installation sehen arbeiten Laravel Migration - Modify Columns

Lehre installieren/DBAL tun nur composer require doctrine/dbal

Hinweis: Ändern jede Spalte in einer Tabelle, die auch eine hat Spalte des Typs enum wird derzeit nicht unterstützt.

+0

ich Ihren Vorschlag angewendet, aber ich konfrontiert mit diesem Fehler: '[Lehre \ DBAL \ DBALException] Unknown Enum Datenbanktyp angefordert, Lehre \ DBAL \ Platforms \ MySqlPlatform nicht unterstützen kann it.' meine Updates Siehe – moh

+0

, das ist der richtige Laravally Weg, dies zu tun. – karmendra

+0

Ich habe diese Installation, aber hat nicht funktioniert! in Ihrem Link ([https://laravel.com/docs/master/migrations#modifying-columns]) können Sie lesen, dass: 'Ändern einer Spalte in einer Tabelle, die auch eine Spalte des Typs enum hat, wird derzeit nicht unterstützt. ' – moh