2016-03-20 17 views
2

ich diese seltsame Fehler, wenn meine Zwänge Migration Ausführung Wenn ich diese Migration durchführen ichLaravel 5.1 Fremdschlüssel Migration Fehler

[Illuminate\Database\QueryException] 
    SQLSTATE[HY000]: General error: 1005 Can't create table 'flowtime_dev.#sql-85bb_52' (errno: 121) (SQL: alter table `questions` add constraint questions_inventory_i 
    d_foreign foreign key (`inventory_id`) references `inventories` (`id`) on delete cascade) 



    [PDOException] 
    SQLSTATE[HY000]: General error: 1005 Can't create table 'flowtime_dev.#sql-85bb_52' (errno: 121) 

ich gelesen habe, dass die Datentypen in verschiedenen Tabellen sollten (wie int übereinstimmen (10) bis int (10)) und sie tun, dies ist auch die letzte Migration, die ich habe (alle Tabellen existieren und wurden zuvor von anderen Migrationen erstellt).

Ich habe ernsthaft keine Ahnung mehr, was ich tun :(Könnte jemand helfen Ich habe ähnliche Beiträge gesehen, aber sie haben nicht das Problem, so weit für mich fixiert

Die Migration ist wie folgt:.?.

public function up() 
    { 
     Schema::table('questions', function ($table) { 
      $table->integer('inventory_id')->unsigned()->change(); 
      $table->foreign('inventory_id') 
       ->references('id')->on('inventories') 
       ->onDelete('cascade'); 
     }); 

     Schema::table('question_response', function ($table) { 
      $table->integer('question_id')->unsigned()->change(); 
      $table->foreign('question_id') 
       ->references('id')->on('questions') 
       ->onDelete('cascade'); 
     }); 

     Schema::table('question_response', function ($table) { 
      $table->integer('sample_result_set_id')->unsigned()->change();    
      $table->foreign('sample_result_set_id') 
       ->references('id')->on('sample_response_set') 
       ->onDelete('cascade'); 
     }); 

     Schema::table('inventory_response', function ($table) { 
      $table->integer('inventory_id')->unsigned()->change(); 
      $table->foreign('inventory_id') 
       ->references('id')->on('inventories') 
       ->onDelete('cascade'); 
     }); 

     Schema::table('inventory_response', function ($table) { 
      $table->integer('sample_result_set_id')->unsigned()->change(); 
      $table->foreign('sample_result_set_id') 
       ->references('id')->on('sample_response_set') 
       ->onDelete('cascade'); 
     }); 

    } 
+0

Welche Datenbank verwenden Sie? –

+0

@AaronFranco MySql – DarkFeud

Antwort

1

zu Beginn der Migration drehen Fremdschlüssel-Constraints aus.

SET FOREIGN_KEY_CHECKS=0; 

wenn dann die Daten migriert werden, drehen sie auf dem Rücken .

Wenn das nicht funktioniert, dann fügen Sie die folgende Zeile hinzu.

$table->engine = 'InnoDB' 

Further, you can rename the constraint since the name may already be used...

$table->foreign('inventory_id', 'fk_questions_inventory_id')->... 
+0

hilft nicht Ich habe es versucht – DarkFeud

+0

hinzugefügt DB :: Anweisung ('SET FOREIGN_KEY_CHECKS = 0'); before und DB :: statement ('SET FOREIGN_KEY_CHECKS = 1'); nach der Migration endet @AaronFranco – DarkFeud

+0

innoDB hat nicht geholfen aswll @AaronFranco – DarkFeud

1

Versuchen zwei separate Migrationen zu verwenden.

Erstellen Sie die erste Migration, die Tabellen und alle Spalten erstellt (setzen Sie alles außer $table->foreign Klauseln hier). Führen Sie den Befehl migrate aus. Führen Sie keine zweite aus, sondern entfernen Sie sie vorübergehend aus dem Migrationsverzeichnis, wenn Sie diese Migration bereits haben.

Dann erstellen Sie die zweite Migration, die Fremdschlüssel zu bereits erstellten Spalten hinzufügen (verwenden Sie nur $table->foreign Klauseln hier). Führen Sie den Befehl migrate erneut aus.

Das hat mir geholfen, als ich in der gleichen Situation war. Ich hoffe, es wird auch für dich funktionieren.

+0

Ich versuchte es das erste Mal :(Ich migrierte – DarkFeud

+0

So half es nicht? –

+0

das Hauptproblem ist, dass ich dumm bin, einige der Migration hatte gelaufen schon durch, was bedeutete, dass es jedes Mal fehlschlug, brauchte ich einige Zeit, um das zu erkennen. Danke für die Hilfe :) – DarkFeud