Jay Gorio
Jay Gorio

Reputation: 335

Getting error: SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint in Laravel 5

I have this four tables but I'm getting the above error in Laravel eloquent. can anyone tell what am I missing here? But when I remove the foreign method the migration works fine.

  Schema::create('students', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('first_name');
        $table->string('last_name');
        $table->string('middle_name');
        $table->date('birthdate');
        $table->integer('degree_id')->unsigned();
        $table->index(['id','first_name', 'last_name']);
        $table->timestamps();

        $table->foreign('degree_id')
              ->references('id')
              ->on('degrees');


    });

I included unsigned method but still getting the above error.

   Schema::create('degrees', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('description');
        $table->string('category_id');
        $table->integer('duration');
        $table->string('sub_code');
        $table->timestamps();

        $table->foreign('sub_code')
              ->references('id')
              ->on('courses');
    });

Here's the other two tables.

        Schema::create('instructors', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('first_name');
        $table->string('middle_name');
        $table->string('last_name');
        $table->date('birthdate');
        $table->index(['id', 'first_name', 'last_name']);
        $table->timestamps();
    });

And the last table:

Schema::create('courses', function (Blueprint $table) {
        $table->string('id')->unique();
        $table->string('description');
        $table->integer('no_of_units');
        $table->string('room_id');
        $table->date('schedule');         
        $table->integer('instructor_id')->unsigned();
        $table->timestamps();

        $table->foreign('instructor_id')
              ->references('id')
              ->on('instructors');

    });

Upvotes: 0

Views: 526

Answers (1)

CodePuppet
CodePuppet

Reputation: 191

The order of your migration files matters. If you're creating the students table first before the degrees table, your foreign key constraint will fail because the degrees table hasn't been created yet.

To solve this, you can move all your foreign key constraints into a migration create_foreign_key_constraints_migration which should run last.

Upvotes: 1

Related Questions