2017-07-04 1 views
1

Meine Tabelle 'sales_order_details' hat das Feld id als Ganzzahl 'int (10)' mit einem Standardwert 0. Ich muss es als primären Autoinkrementschlüssel bei der Migration ändern.Laravel-Migration - wie das ID-Feld zu einem primären und automatisch inkrementierenden später geändert wird

habe ich versucht, auf folgende Weise:

public function up() 
    { 
     Schema::table('sales_order_details', function (Blueprint $table){ 

     $table->integer('id')->default(NULL)->change(); 
     $table->increments('id')->change(); 

     }); 
    } 

    public function down() 
    { 
     Schema::table('sales_order_details', function (Blueprint $table){ 
     $table->dropPrimary('id')->change(); 

     }); 
    } 

ich folgende Fehlermeldungen erhalten:

[Illuminate \ Database \ QueryException] SQLSTATE [42000]: Syntaxfehler oder Zugriffsverletzung: 1075 Falsche Tabelle def Inition; es kann nur eine Autokolonne sein, und es muss als Schlüssel (SQL: sales_order_details id INT UNSIGNED AUTO_INCREM ENT NOT NULL CHANGE id ALTER TABLE) definiert werden

[Lehre \ DBAL \ Driver \ PDOException] SQLSTATE [42000 ]: Syntaxfehler oder Zugriffsverletzung: 1075 Falsche Tabelle def Inition; es kann nur eine Spalte Auto sein und es muss als Schlüssel

[PDOException] SQLSTATE [42000] definiert werden: Syntaxfehler oder eine Zugriffsverletzung: 1075 Falsche Tabelle def inition; es kann nur eine automatische Spalte geben und sie muss als Schlüssel definiert werden

Wie wird die Migration ordnungsgemäß durchgeführt? Ich bin mit Version 5.4

+0

Warum Sie diese beide schreiben Zeilen $ table-> integer ('id') -> default (NULL) -> change(); $ table-> increments ('id') -> change(); Nur die zweite wird für Inkremente benötigt. –

+0

Werden "default" und "increments" nicht zu Problemen führen, wenn sie zusammen verwendet werden? –

Antwort

3

Sie können wie diese versuchen

public function up() 
    { 
     DB::statement("ALTER TABLE sales_order_details MODIFY id INT NOT NULL PRIMARY KEY AUTO_INCREMENT");    
    } 

    public function down() 
    { 
     DB::statement("ALTER TABLE sales_order_details MODIFY id INT NOT NULL"); 
     DB::statement("ALTER TABLE sales_order_details DROP PRIMARY KEY"); 
     DB::statement("ALTER TABLE sales_order_details MODIFY id INT NULL"); 
    } 

Dies ist die eine der Art und Weise ist, dass Sie Ihr Ziel erreichen kann, ich hoffe, dass dies hilfreich ist für Sie

+0

Wie haben Sie den Standardwert von ID entfernt? –

+0

Wenn der Primärschlüssel vorhanden ist, dann können Sie keinen Nullwert angeben, also muss ich zuerst den Primärschlüssel ablegen und dann die Spalte als Nullwert und im Nullwertfeld den Nullwert –

+0

angeben 'Methode. Sie haben den Standardwert dort nicht entfernt. –

Verwandte Themen