Laravel 迁移:Errcode:150“外键约束格式不正确”

Posted

技术标签:

【中文标题】Laravel 迁移:Errcode:150“外键约束格式不正确”【英文标题】:Laravel Migration : Errcode: 150 "Foreign key constraint is incorrectly formed" 【发布时间】:2019-07-27 05:35:03 【问题描述】:

我正在尝试执行此迁移:

用户:

Schema::create('comments', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->string('first_name');
            $table->string('last_name');
            $table->string('email')->unique();
            $table->string('avatar_url');
            $table->string('email_verified_at')->nullable();
            $table->string('password')->unique();
            $table->rememberToken();
            $table->timestamps();
            $table->softDeletes();
        );

文章:

Schema::create('articles', function (Blueprint $table) 
            $table->bigIncrements('id');
            $table->text('title');
            $table->longText('body');
            $table->enum('state', ['draft', 'published']);
            $table->bigInteger('user_id')->unsigned();
            $table->timestamps();
            $table->softDeletes();
            $table->foreign('user_id')
                ->references('id')->on('users')
                ->onUpdate('cascade')->onDelete('cascade');
        );

但是当我迁移时出现以下错误:

SQLSTATE[HY000]: 一般错误: 1005 Can't create table blog_api.#sql-2b70_7b (Errcode: 150 "Foreign key constraint is inc 正确形成”)(SQL:更改表articles添加约束articles_user_id_foreign外键(user_id)引用users<br>id)在更新级联上删除级联)

我已经尝试将大整数和大增量重命名为简单整数和增量,但没有成功。

【问题讨论】:

你是如何定义你的users.id 的? 您已共享comments 表请共享users 表并确保FKid 数据类型匹配! 看看这个***.com/a/52902308/5928015 【参考方案1】:

应该有一个 unassignedBigInteger 然后你设置你的外键。

https://laravel.com/docs/5.8/migrations#foreign-key-constraints请查看官方文档

另外,

请注意迁移顺序。它从第一个文件开始到最新的文件,因此如果您尝试为尚未创建的表设置外键,则会引发错误。

例如

Users表与文章有外键关系,如下所示;

create_users_table create_articles_table

由于文章表尚未创建,您将无法分配。对于这种情况,我建议您在创建所有基本表结构后使用“add_foreign_keys_to_articles”。

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

【讨论】:

以上是关于Laravel 迁移:Errcode:150“外键约束格式不正确”的主要内容,如果未能解决你的问题,请参考以下文章

Laravel 迁移:“外键约束格式不正确”(errno 150)

laravel 5.4 迁移错误:150“外键约束格式不正确”

Laravel 迁移错误:150“外键约束格式不正确”

添加外键时Laravel迁移错误

Laravel 4迁移问题中的外键

Laravel 迁移不能在用户表中添加外键