Reputation: 624
I'm getting the following error:
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table
subtags
add constraintsubtags_tag_id_foreign
foreign key (tag_id
) referencesid
(tags
) on delete cascade)
After looking at other answers regarding this error on stackoverflow and this blogpost: https://www.percona.com/blog/2017/04/06/dealing-mysql-error-code-1215-cannot-add-foreign-key-constraint/ I still can't figure out why I'm getting the error.
This is the migration for the subtag table:
public function up()
{
Schema::create('subtags', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->integer('tag_id')->unsigned();
$table->integer('id')->unsigned();
$table->string('name');
$table->timestamps();
});
Schema::table('subtags', function (Blueprint $table) {
$table->foreign('tag_id')
->references('tags')
->on('id')
->onDelete('cascade');
$table->primary(array('tag_id', 'id'));
});
}
At the point of error the tag table has already been created and I can't spot any typo's but just to make sure, here is the tag table migration:
public function up()
{
Schema::create('tags', function (Blueprint $table) {
$table->engine = 'InnoDB';
$table->increments('id');
$table->string('name');
$table->timestamps();
});
}
Upvotes: 0
Views: 169
Reputation: 480
You can disable check foreigns keys before migrate
DB::statement('SET FOREIGN_KEY_CHECKS=0;');
...
DB::statement('SET FOREIGN_KEY_CHECKS=1;');
Upvotes: 0
Reputation: 2514
Your query shows that you have misplaced the column & table in:
Schema::table('subtags', function (Blueprint $table) {
$table->foreign('tag_id')
->references('tags')
->on('id')
->onDelete('cascade');
$table->primary(array('tag_id', 'id'));
});
Reference should be "column" on "Table" like:
Schema::table('subtags', function (Blueprint $table) {
$table->foreign(id'tag_id')
->references('id')
->on('tags')
->onDelete('cascade');
$table->primary(array('tag_id', 'id'));
});
Upvotes: 1