1

我正在尝试将 FK 'module_id' 添加到我的表 'documents' 中。我运行了以下查询:

 public function up()
    {
        Schema::table('documents', function (Blueprint $table) {

            $table->integer('module_id')->unsigned();
            $table->foreign('module_id')->references('id')->on('modules');

        });
    }

正在返回以下错误:

SQLSTATE[HY000]:一般错误:1215 无法添加外键约束(SQL:alter tabledocuments添加约束 documents_module_id_foreign外键(module_id)引用 modulesid))

我不确定我做错了什么,我确定这可能是一个愚蠢的错误,但我花了很多时间绕着圈子试图弄清楚......这是我尝试过的......

  • 两个表都已创建
  • 两列的数据类型是一致的(都是 unsignedBigInts,20)

我已经包含了我的数据库表的图片,我感谢任何帮助。 在此处输入图像描述 在此处输入图像描述

更新:

SQLSTATE [23000]:完整性约束违规:1452 无法添加或更新子行:外键约束失败(laravel. #sql-2cd_23, CONSTRAINT documents_module_id_foreign FOREIGN KEY ( module_id) REFERENCES modules( id))(SQL:alter table documentsadd constraint documents_module_id_foreignforeign key ( module_id) 引用modulesid))

4

1 回答 1

1

列的类型需要是一个大整数。

    Schema::table('documents', function (Blueprint $table) {
        $table->unsignedBigInteger('module_id');
        $table->foreign('module_id')->references('id')->on('modules');

    });

更新

您可能已经在表中获得数据,因为该列不能为空,外键不能存在。将其作为可为空的开始,然后添加关系并删除可为空的将修复它。所以:

$table->unsignedBigInteger('module_id')->nullable();
于 2020-04-01T11:07:12.727 回答