【问题标题】:Why can't I properly create a table with a foreign key?为什么我不能正确创建带有外键的表?
【发布时间】:2021-02-05 11:23:34
【问题描述】:

我想创建 2 个表:

  1. 名为roles 的表
  2. 还有一个名为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 Can't create table my_db.users (errno: 150 "外键约束格式不正确") (SQL: alter table users add constraint users_role_id_foreign外键 (role_id) 引用 roles (role_id))

【问题讨论】:

    标签: mysql laravel laravel-migrations


    【解决方案1】:

    更改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”列的外键。

    【讨论】:

    • 非常感谢。对于那些仍在努力解决问题的人,我建议检查外键和键的大小。他们应该是一样的
    【解决方案2】:

    有一个定义问题让它像$table->foreign('role_id')->references('id')->on('roles');

    或者您需要将角色表的主键设为role_id 我想这将解决您正在寻找的内容

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-12-01
      • 2013-05-07
      • 1970-01-01
      • 2021-04-05
      • 1970-01-01
      • 2016-07-12
      • 2012-06-19
      • 1970-01-01
      相关资源
      最近更新 更多