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

SQLSTATE[HY000]:一般错误:1215无法添加外键约束Laravel 5.8

丁宏盛
2023-03-14

我正在尝试使用Laravel 5.8为“users”表创建外键。

Laravel 5.8自动生成的迁移表如下,

public function up()
    {
        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();
        });
    }

然后从我的“存储库”表中,我引用了“用户”表,如下所示,

        Schema::create('repositories', function (Blueprint $table) {
            $table->string('id', 8)->primary();
            $table->string('name')->nullable(false);
            $table->string('size')->nullable(false);
            $table->unsignedInteger('user_id')->nullable(false);
            $table->timestamps();
        });


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

但我在这段代码上遇到了“一般错误:1215无法添加外键约束”错误。有许多与此问题相关的解决方案。

一般错误:1215无法在laravel中添加外键约束

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

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

我已经尝试了上述解决方案。但我的问题没有解决

共有3个答案

农诚
2023-03-14

这可能是因为user\u id列与id列不匹配。

user\u id的类型必须为bigInteger,并且还需要编制索引。

参考:在Laravel 5.4中设置外键bigintger到big增量

管景天
2023-03-14

从Laravel 5.8开始,使用bigIncrements代替主键的增量。如果主键使用bigIncrements,则必须将user\u id字段声明为bigInteger,而不是integer。这样,主键和外键的字段将共享相同类型的数据,否则将出现错误

叶俊郎
2023-03-14

试试这个

Schema::create('repositories', function (Blueprint $table) {
     $table->string('id', 8)->primary();
     $table->string('name')->nullable(false);
     $table->string('size')->nullable(false);
     $table->unsignedBigInteger('user_id');
     $table->timestamps();

     $table->foreign('user_id')->references('id')->on('users');
});

根据laravel 5.8外键约束

Schema::table('posts', function (Blueprint $table) {
    $table->unsignedBigInteger('user_id');

    $table->foreign('user_id')->references('id')->on('users');
});
 类似资料:
  • 我正在尝试使用artisan创建外键,但出现了此错误。 这是我的迁移: 在批次表中,我使用作为it模型批次。我补充说: 知道如何解决这个错误吗?

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

  • 问题内容: 我正在尝试为体育馆管理系统创建数据库,但无法弄清楚为什么会出现此错误。我试图在这里搜索答案,但找不到。 这是父表。 你们能帮我解决这个问题吗?谢谢。 问题答案: 为了将字段定义为,引用的父字段必须在其上定义了索引。 根据有关约束的文档: 参考parent_tbl_name(index_col_name,…) 定义上,和分别。并确保子列定义必须与其父列定义匹配。 更改表定义如下: 更改表

  • 问题内容: 我已经阅读了 Silberschatz的 数据库系统概念 ,第6版。我将在MySQL的OS X上实现第2章所示的大学数据库系统。但是我在创建表时遇到了麻烦。桌子看起来像 __ 创建表将导致以下错误。 在google搜索外键约束之后,我刚刚了解到“外键约束”一词表示来自表中外键列的数据必须存在于表的主键列中。但是我应该在插入数据时遇到此错误。 如果没有,为什么作者让我执行该SQL语句?

  • 关于这个错误,我到处都找过,也看过很多例子,但我还是想不出我的脚本有什么问题。如果这是一个常见的问题,我很抱歉,但到目前为止,搜索它对我没有帮助。剧本如下: 非常感谢你的帮助。