我尝试迁移我的表,但它显示错误:
错误:150“异常形成外键约束”)(SQL:alter 表
users
添加约束users_role_id_foreign
外键 (role_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();
});
答案 0 :(得分:1)
问题是,当您使用users
表的外键创建roles
表时,roles
表尚不存在,因此您无法添加外键引用它。
我还注意到roles
表还有一个引用users
表的外键,这使得情况更加棘手。
如果您完全确定roles
表需要users
表的外键,那么您需要从users
表定义中删除外键创建,并添加在alter table
表创建后,它会单独返回roles
。
但是,我不确定roles
表应该有users
表的fk(除非它代表创建该角色的用户),因为你可以有多个用户一名角色。如果您正在建模多对多关系,那么这不是实现它的方法。但这与当前错误无关,因此仅将其视为旁注。
答案 1 :(得分:0)
有时由于迁移顺序也可能发生错误。如果面对errno 150“外键约束格式不正确”,请转到migrations文件夹并检查是否首先执行了父表迁移。如果首先按照迁移顺序执行子表迁移,它将尝试查找外键绑定并显示该错误。