SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint laravel 9
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint laravel 9
正在尝试分配外键,但是当您 运行 迁移时,出现此错误,我不明白问题出在哪里。
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table categories
add constraint categories_parent_key_foreign
foreign key (parent_key
) references categories
(key
) on delete cascade)
$table->bigIncrements('id');
$table->string('key', 64)->unique();
$table->string('parent_key', 64)->nullable()->index();
$table->string('title', 256)->index()->unique();
$table->foreign('parent_key')->references('key')
->on((new Category())->getConnection()->getDatabaseName() . '.' . Category::TABLE)
->onDelete('cascade');
我遇到了同样的问题。
当模型与自身有关系 (self-relation) 时,就会出现问题。
要解决这个问题,首先必须创建迁移文件,然后必须在另一个迁移文件中分配外键。
您必须从迁移文件中删除外键分配并在之后创建新的迁移文件,然后添加关系语句以分配外键。 (迁移文件的顺序很重要)。
create_category_table
public function up(): void
{
$table->bigIncrements('id');
$table->string('key', 64)->unique();
$table->string('parent_key', 64)->nullable()->index();
$table->string('title', 256)->index()->unique();
}
create_category_relation_table
public function up(): void
{
$table->foreign('parent_key')->references('key')
->on((new Category())->getConnection()->getDatabaseName() . '.' . Category::TABLE)
->onDelete('cascade');
}
然后php artisan migration
正在尝试分配外键,但是当您 运行 迁移时,出现此错误,我不明白问题出在哪里。
SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table
categories
add constraintcategories_parent_key_foreign
foreign key (parent_key
) referencescategories
(key
) on delete cascade)
$table->bigIncrements('id');
$table->string('key', 64)->unique();
$table->string('parent_key', 64)->nullable()->index();
$table->string('title', 256)->index()->unique();
$table->foreign('parent_key')->references('key')
->on((new Category())->getConnection()->getDatabaseName() . '.' . Category::TABLE)
->onDelete('cascade');
我遇到了同样的问题。 当模型与自身有关系 (self-relation) 时,就会出现问题。 要解决这个问题,首先必须创建迁移文件,然后必须在另一个迁移文件中分配外键。 您必须从迁移文件中删除外键分配并在之后创建新的迁移文件,然后添加关系语句以分配外键。 (迁移文件的顺序很重要)。
create_category_table
public function up(): void
{
$table->bigIncrements('id');
$table->string('key', 64)->unique();
$table->string('parent_key', 64)->nullable()->index();
$table->string('title', 256)->index()->unique();
}
create_category_relation_table
public function up(): void
{
$table->foreign('parent_key')->references('key')
->on((new Category())->getConnection()->getDatabaseName() . '.' . Category::TABLE)
->onDelete('cascade');
}
然后php artisan migration