当前位置: 首页 > 知识库问答 >
问题:

Laravel迁移一般错误:1215无法添加外键约束Laravel 7。x个

弓明亮
2023-03-14

我想在我的laravel 7. x应用程序上使用两个模型:用户和图像:

# Users migration : 2014_10_12_000000_create_users_table.php

Schema::create('users', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->string('name');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->rememberToken();
        $table->timestamps();
    });

# Images migration : 2020_03_27_121254_create_models_images_table
Schema::create('images', function (Blueprint $table) {
        $table->bigIncrements('id');
        $table->bigInteger('user_id')->unsigned;
        $table->string('name');
        $table->timestamps();
    });

    Schema::table('images', function (Blueprint $table) {
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade');
    });

尝试迁移时,我收到以下错误:一般错误:1215无法添加外键约束(SQL:alter tableimagesadd constraintimages\u user\u id\u foreign外键(user\u id)引用

我已经在谷歌上搜索过了,但没有成功,有人能帮我吗?

谢谢你


共有2个答案

淳于凯
2023-03-14

您在unsiged()中缺少括号

根据Laravel文档

<代码>-

改变

 $table->bigInteger('user_id')->unsigned;

$table->bigInteger('user_id')->unsigned();
杭昊空
2023-03-14

未正确设置未签名的代码。

替换:

$table->bigInteger('user_id')->unsigned;

通过:

$table->bigInteger('user_id')->unsigned();

由于user_id不是无符号的,因此定义与user表的id不匹配,这意味着您无法设置外键。

您还可以这样做:

$table->unsignedBigInteger('user_id');

从Laravel 7开始,您可以在迁移用户时这样做:

Schema::table('users', function (Blueprint $table) {
    $table->id();
    // ...
});

在您的迁移图像中:

Schema::table('users', function (Blueprint $table) {
    // ...
    $table->foreignId('user_id')->constrained();
});

您可以在此处找到更多信息:https://laravel.com/docs/7.x/migrations#foreign-关键约束条件

 类似资料:
  • 我正在尝试使用artisan创建外键,但出现了此错误。 这是我的迁移: 在批次表中,我使用作为it模型批次。我补充说: 知道如何解决这个错误吗?

  • 我正在尝试使用Laravel 5.8为“users”表创建外键。 Laravel 5.8自动生成的迁移表如下, 然后从我的“存储库”表中,我引用了“用户”表,如下所示, 但我在这段代码上遇到了“一般错误:1215无法添加外键约束”错误。有许多与此问题相关的解决方案。 一般错误:1215无法在laravel中添加外键约束 迁移:无法在laravel中添加外键约束 MySQL数据库发生Laravel迁

  • 试图分配外键,但当你运行迁移,我得到这个这个错误,我不明白是什么问题。 SQLSTATE[HY000]:一般错误:1215无法添加外键约束(SQL:alter table

  • 我有多个迁移,但我认为与这个问题相关的两个迁移是“作业”和“会话”迁移。 作业迁移

  • 问题内容: 我正在尝试将新模式转发工程到我的数据库服务器上,但是我不知道为什么会收到此错误。我试图在这里搜索答案,但是我发现的所有内容都说是将db引擎设置为Innodb或确保要用作外键的键是它们自己表中的主键。如果我没记错的话,我都做过这两件事。你们还有其他帮助吗? SQL脚本执行完成:语句:成功7次​​,失败1次 这是父表的SQL。 问题答案: 我猜,和/或不完全相同的数据类型和。 也许父表中的

  • 引用的表是“组”(InnoDB)。 它有一个“id”列,定义为INT(11),不可为空,自动递增,主键 引用表为“用户(InnoDB)” 它的group_id列定义为INT(11),不可为空。 在引用表中已经存在一个基于“group_id”列的唯一索引 但是whn正在执行 我出错了 错误:1215无法添加外键约束 我添加db转储 检查清单 Db是InnoDB吗?是的 所有表都是InnoDB吗?是的