2016-10-21 11 views
1

Ich habe mehrere Threads darüber gelesen, aber immer noch nicht genau mein Problem. Also in der users Tabelle habe ich eine Spalte mit dem Namen role, die enum-Typ ist und zwei verfügbare Werte hat: 1 und 2. Ich setze 2 als Standard. Jetzt möchte ich es zum Beispiel auf 1 ändern. Ich habe eine neue Migration, lief php artisan migrate und dieser Fehler auftritt:Tabellenstrukturen mit Migration ändern, ohne Daten zu verlieren?

[Illuminate\DatabaseQueryException]           

SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'role' (SQL: alter table `u 
    sers` add `role` enum('1', '2') not null default '1')              
[PDOException]                
    SQLSTATE[42S21]: Column already exists: 1060 Duplicate column name 'role' 

Hier ist Code in meinem CreateUsersTable Migrationsdatei:

$table->enum('role', ['1', '2'])->default('2'); 

Und ich tat das gleiche in der neuen UpdateUsersTable Migrationsdatei:

$table->enum('role', ['1', '2'])->default('1'); 

Und übrigens kann ich php artisan migrate:refresh nicht verwenden, weil es alle meine Daten löschen wird. Wo mache ich falsch?

+0

fallen diese Rolle Spalte und migrieren UpdateUsersTable –

+0

http://stackoverflow.com/questions/20516514/updating-table-scheme-without-affecting-data-in-laravel?rq=1 beziehen sich auf diesen Beitrag –

+0

@JagadeshaNH This löscht die gespeicherten Rollen Daten. –

Antwort

2
$table->enum('role', ['1', '2'])->default('1')->change(); 
+0

versuchte dies und es forderte mich, Doktrin/Dbal zu installieren. –

+0

, aber nach der Installation sagte, dass "unbekannte Datenbank Typ Enum angefordert Doctrine \ DBAL \ Platforms \ MySQL57Platform möglicherweise es nicht unterstützt." –

+0

Ja, ich habe es bei der Beantwortung verpasst. Es gibt ein Problem mit "enum" -Typ in Laravel. Werfen Sie einen Blick auf diese Antwort http://stackoverflow.com/a/40176304/5130217. Möglich ist es richtiger. – aleksejjj

1
<?php 

use Illuminate\Support\Facades\DB; 
use Illuminate\Database\Migrations\Migration; 

class UpdateUsersTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     DB::statement('ALTER TABLE `users` MODIFY `role` DEFAULT 1;'); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     DB::statement('ALTER TABLE `users` MODIFY `role` DEFAULT 2;'); 
    } 
} 

von this answer to another question Angepasst

+0

Schauen Sie sich Greate an, aber es heißt SQL-Syntaxfehler. –

+0

@DuongNguyen 'ALTER TABLE Benutzer CHANGE COLUMN Rollenrolle ENUM ('1', '2') NOT NULL DEFAULT '1';' – aleksejjj

1

Um dies was Sie tun müssen ->nullable() oder ->default() zu jedem Feld hinzufügen, die Sie in die Migrationsdatei hinzuzufügen.

Verwandte Themen