Php (拉拉维尔)错误号:150“;外键约束的格式不正确

Php (拉拉维尔)错误号:150“;外键约束的格式不正确,php,mysql,laravel,laravel-5,Php,Mysql,Laravel,Laravel 5,我尝试迁移我的表,但它显示一个错误,即: errno:150“外键约束格式不正确”)(SQL:alter 表users添加约束users\u role\u id\u foreign外键 (role\u id)引用roles(id) 这是我的桌子: Schema::create('users', function (Blueprint $table) { $table->increments('id')->unsigned(); $table->s

我尝试迁移我的表,但它显示一个错误,即:

errno:150“外键约束格式不正确”)(SQL:alter 表
users
添加约束
users\u role\u id\u foreign
外键 (
role\u id
)引用
roles
id

这是我的桌子:

Schema::create('users', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('fullname');
        $table->string('username')->unique();
        $table->string('email')->unique();
        $table->string('password');
        $table->integer('role_id')->unsigned();
        $table->foreign('role_id')->references('id')->on('roles');
        $table->rememberToken();
        $table->timestamps();
    });


Schema::create('roles', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->string('name')->unique();
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->timestamps();
    });


Schema::create('posts', function (Blueprint $table) {
        $table->increments('id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users');
        $table->string('content');
        $table->string('image');
        $table->timestamps();
    });

问题是,当您使用
角色
表的外键创建
用户
表时,
角色
表还不存在,因此您无法添加引用它的外键

我还注意到,
角色
表也有一个外键引用
用户
表,这使得情况更加棘手

如果绝对确定
角色
表需要
用户
表的外键,则需要从
用户
表定义中删除外键创建,并在创建
角色
表后将其单独添加回
alter table


但是,我不确定
角色
表是否应该对
用户
表具有fk(除非它代表创建角色的用户),因为一个角色中可以有多个用户。如果您正在为多对多关系建模,那么这不是实现该关系的方法。但这与当前的错误无关,因此请仅将其作为旁注。

有时,由于迁移顺序的原因,也会发生此错误。如果遇到errno 150“外键约束格式不正确”,请转到migrations文件夹,检查是否首先执行了父表迁移。如果首先根据迁移顺序执行子表迁移,它将尝试查找外键绑定并显示该错误。

可能的重复项我了解外键列和引用列不是同一类型的,但根据我在Laravel文档中所知道的增量是增量ID(主键)使用“无符号整数”等价,所以我将外键列设为无符号整数。我想知道如何修复它,因为我做了他们想做的事情,或者可能是我在做wrong@FahadAlDaferi事实上,它不是unsigned。对于寻找简单解决方案的人,请尝试重命名文件名,确保在文件名中父表迁移的日期早于具有forei的表gn key。我认为迁移是按递增的日期顺序执行的。比如:2014年,然后是2015年等等。假设迁移中的所有其他内容都是正确的,这是可行的。是的,你是对的,但让我解释一下我想做什么。我有两个角色1个管理员-2个用户,我想为每个用户分配一个,因为我只希望管理员用户登录backend dashboard目前,我将角色和用户之间的关系作为一个(角色)到多个(用户)的关系,因此我需要您的帮助。这是一个与此完全不同的问题,您必须发布它。正如我在回答中解释的,这是一个旁注。这个问题是关于fk错误的。