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