无法在 Laravel 迁移中添加外键约束

Posted

技术标签:

【中文标题】无法在 Laravel 迁移中添加外键约束【英文标题】:Cannot add foreign key constraint in Laravel Migration 【发布时间】:2020-03-12 19:01:29 【问题描述】:

我发现发布了许多类似的问题,但似乎没有一个解决方案适用于我的情况。当我运行“php artisan migrate:fresh”时,它会抛出错误......

Illuminate\Database\QueryException : SQLSTATE[HY000]: 一般错误: 1215 无法添加外键约束(SQL:alter table slicer_profiles 添加约束 slicer_profiles_user_id_foreign 删除级联时外键 (user_id) 引用 users (id)

创建的所有表都是 InnoDB “用户”表在我的表之前创建

我将代码分为两步,然后分配外键

Schema::create('slicer_profiles', function (Blueprint $table) 
    $table->increments('id');
    $table->integer('user_id')->unsigned()->index();
    $table->string('title');
    $table->text('description');
    $table->string('slicer');
    $table->string('machine');
    $table->softDeletes();
    $table->timestamps();
);

Schema::table('slicer_profiles', function($table) 
    $table->foreign('user_id')->unsigned()
        ->references('id')
        ->on('users')
        ->onDelete('cascade');
);

我检查了 auth users 表,它似乎使用了 UNSIGNED BIGINT,所以我也尝试在引用上设置 ->unsigned(),但没有改变。任何解决此问题的帮助将不胜感激!

【问题讨论】:

【参考方案1】:

如果 users.id 字段是 BIGINT,那么您需要将 slicer_profiles 上的 users_id 列设置为 BIGINT,以便这两个字段具有完全匹配的类型。

Schema::create('slicer_profiles', function (Blueprint $table) 
    ...
    $table->bigInteger('user_id')->unsigned()->index();
    // or $table->unsignedBigInteger('user_id')->index();
    ...
);

【讨论】:

谢谢您,它立即修复了它。我想我正在关注的教程有点过时了,也许 Laravel 将 'users' auth 表上的 'id' 从 INT 更改为 BIGINT 或其他东西,因为它是编写的。感谢您的帮助! 是的,将users 表调整为使用bigIncrements 是一个较新的变化

以上是关于无法在 Laravel 迁移中添加外键约束的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移:无法添加外键约束

Laravel 表迁移:无法添加外键约束

:完整性约束违规:1452 无法添加或更新子行:laravel 迁移中的外键约束失败

无法添加外键约束 - Laravel 迁移错误

MySQL数据库的Laravel迁移“无法添加外键约束”错误

Laravel 迁移 - 一般错误:1215 无法添加外键约束