1

试图分配外键但是当你运行迁移时,我得到这个错误,我不明白问题是什么。

SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:删除级联时更改表categories添加约束categories_parent_key_foreign外键(parent_key)引用categories( ))key

$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');
4

2 回答 2

1

我有同样的问题。当模型与自身有关系(自我关系)时,就会出现问题。要解决这个问题,首先必须创建迁移文件,然后必须在另一个迁移文件中分配外键。您必须从迁移文件中删除外键分配,然后创建新的迁移文件,然后添加关系语句以分配外键。(迁移文件的顺序很重要)。

创建类别表

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();

}

创建类别关系表

public function up(): void
{
    $table->foreign('parent_key')->references('key')
            ->on((new Category())->getConnection()->getDatabaseName() . '.' . Category::TABLE)
            ->onDelete('cascade');
}

进而php artisan migration

于 2022-02-26T09:40:40.263 回答
-1

我建议对外键约束使用最新的方法

$table->foreignId('user_id')->constrained('table_name_here');

// OR

$table->foreignId('user_id')
      ->constrained('table_name_here')
      ->onUpdate('cascade')
      ->onDelete('cascade');

示例可以在文档 https://laravel.com/docs/9.x/migrations#foreign-key-constraints中找到

于 2022-02-24T12:54:17.660 回答