如何解决为什么我不能正确创建带有外键的表?
我想创建2个表:
- 一个名为
roles
的表 - 还有一个名为
users
的表
在users
中,我想有一个名为role_id
的列,它应该是对roles
表的引用。
roles
表应如下所示:
这是user
表的迁移:
Schema::create('users',function (Blueprint $table) {
$table->id();
$table->bigInteger('role_id')->unsigned();
$table->foreign('role_id')->references('role_id')->on('roles');
$table->timestamps();
});
这是roles
talbe的迁移:
Schema::create('roles',function (Blueprint $table) {
$table->id();
$table->string('name');
});
运行php artisan migrate
SQLSTATE [HY000]:常规错误:1005无法创建表
my_db
。users
(错误号:150“外键约束格式不正确”)(SQL:更改表{{1} }添加约束users
外键(users_role_id_foreign
)引用role_id
(roles
))
解决方法
有一个定义问题,使其像$table->foreign('role_id')->references('id')->on('roles');
或者您需要将角色表的主键设置为role_id
,我想这将解决您正在寻找的问题
更改references('id')中的references('role_id'),这意味着角色表中的'id'列中的引用:
$table->foreign('role_id')->references('id')->on('roles');
此外,您应该创建第一个角色表,然后再创建用户表。 只需像这样更改数据库/迁移上的日期(示例):
2020_09_11_150331_create_roles_table.php 2020_09_12_000000_create_users_table.php
运行:
php artisan migrate
首先,将创建角色表,然后创建用户表,该表将处理引用角色表中“ id”列的外键。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。