2016-07-22 13 views
0

Hier ist das Problem. Ich hämmere mir jetzt stundenlang den Kopf. Laravel erlaubt mir nicht, einen Primärschlüssel zu haben (es sagt viel, aber Sie können sehen, dass es nur einen hat). Und weiter mehr, weil es ein Problem gibt, das im Primärschlüssel in der Lehrertabelle verursacht. Ich kann das nicht als Fremdschlüssel in der Kurstabelle verwenden.Mehrere Primärschlüssel gefunden Problem Laravel

Migration Datei für die Lehrertisch

class CreateTeachersTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 

     Schema::create('teachers', function (Blueprint $table) { 
      $table->increments('teacher_id')->primary(); 
      $table->string('email', 200); 
      $table->string('first_name',300)->nullable(); 
      $table->string('last_name',300)->nullable(); 
      $table->string('account_status',50)->default('inactive'); 
      $table->string('subscription_status',50); 
      $table->string('account_reset_code',400)->nullable(); 
      $table->string('passkey',500); 
      $table->timestamps(); 
     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('teachers'); 
    } 
} 

Migrationsdatei für Kurse Tabelle

class CreateCoursesTable extends Migration 
{ 
    /** 
    * Run the migrations. 
    * 
    * @return void 
    */ 
    public function up() 
    { 
     Schema::create('courses', function (Blueprint $table) { 
      $table->increments('course_id')->primary(); 
      $table->integer('teacher_id_fr'); 
      $table->string('course_name', 500); 
      $table->string('course_code',300); 
      $table->string('subject_area',300); 
      $table->string('course_level',100);; 
      $table->string('grade_periods',100); 
      $table->timestamps();  
     }); 

     Schema::table('courses',function(Blueprint $table){ 
      $table->foreign('teacher_id_fr')->references('teacher_id')->on('teachers')->onDelete('cascade')->onUpdate('cascade'); 

     }); 
    } 

    /** 
    * Reverse the migrations. 
    * 
    * @return void 
    */ 
    public function down() 
    { 
     Schema::drop('courses'); 
    } 
} 

Ausgabe auf

Migration angehoben

Syntax Fehler oder Zugriffsverletzung. 1068 Mehrere Primärschlüssel gefunden

.

Was ich jetzt

1) versucht haben machen die primäre Spalte unsigned Methode ohne Vorzeichen verwenden.

2) mit InnnoDB-Motortyp für Tabelle.

3) Und viele andere Dinge wie für ähnliche Beiträge in den Foren vorgeschlagen, aber nichts scheint für mich zu arbeiten.

EDIT

ich den primären() -Methode von beiden Dateien auf Tabellen- $ entfernt habe> Schritte ('teacher_id'). Wie dies gesagt wird, markiert Laravel auto-increments-Spalten als Primärschlüssel.

Aber jetzt ist der Fehler auf Kurse Tabelle wie es sagt.

Allgemeiner Fehler: 1215 nicht über Fremdschlüssel

hinzufügen
+0

Welche Migrationsdatei generiert den Fehler? – jaysingkar

+0

Dank @jaysingkar für Ihre Zeit, Lehrer-Datei. –

Antwort

0

ich in der Lage war, das Problem mit einer kleinen Änderung zu beheben.Ich veränderte Kurse Dateimigration wie unten und es funktionierte wie ein Zauber

$table -> integer('teacher_id_fr') -> unsigned(); 

Grund

beide eigentlich die referenzierten und referenzierenden Spalten (teacher.teacher_id und course.teacher_id_fr in diesem Fall) von gleich sein müssen Art.

Mit diesen Worten markiert Laravel autoinkrement Spalten als "Primary" und Typ unsigned. Stellen Sie daher sicher, dass die Vorentschlüsselspalte so geändert wird, dass sie dem Typ des Primärschlüssels entspricht, d. H. Ohne Vorzeichen. was die obige Modifikation tut.

Ich hoffe, es klärt das Problem und die Lösung. Wenn Sie etwas anderes im Kopf haben. Bitte gib es hier an.

Happy Learning!

0

Sie mehrere primanry Schlüssel in Migrationsdatei wie unten definiert werden können:

$table->primary(array('field_name1', 'field_name2')); 
+0

Bhavin, Danke für deine Zeit. Ich habe das auch gelesen. Aber ich will sie nicht, wie du sehen kannst. Ich benutze nur eine einzige Spalte. Ich habe den Beitrag auf neue Änderungen bearbeitet, überprüfen Sie das bitte. –

0

Versuchen Sie ersetzen diese, entfernen primary(), increments automatisch erzeugt es primary

$table->increments('teacher_id')->primary(); 

zu

$table->increments('teacher_id'); 

Für neue Fehler versuchen, diese General error : 1215 cannot add foreign key constraint

public function up() 
{ 
    Schema::create('courses', function (Blueprint $table) { 
     $table->increments('course_id'); 
     $table->integer('teacher_id_fr'); 
     $table->string('course_name', 500); 
     $table->string('course_code',300); 
     $table->string('subject_area',300); 
     $table->string('course_level',100);; 
     $table->string('grade_periods',100); 
     $table->timestamps();  

     $table->foreign('teacher_id_fr') 
     ->references('teacher_id')->on('teachers') 
     ->onDelete('cascade') 
     ->onUpdate('cascade'); 

    }); 
} 
+0

Rishi, habe das gerade versucht. Siehe die Bearbeitung. Es erzeugt jetzt einen weiteren Fehler in der Kurstabelle bei Fremdschlüssel. –

+0

@NaumanZafar: aktualisiert meine ans – C2486

+0

immer noch gleiche Ausgabe Mann! –