Laravel 8 de迁移过程中的外国错误[重复]

Posted

技术标签:

【中文标题】Laravel 8 de迁移过程中的外国错误[重复]【英文标题】:Foreign error in Laravel 8 de migration process [duplicate] 【发布时间】:2021-05-20 07:11:00 【问题描述】:

我们想将Request表中的RequestTypeID作为外键赋值给DefRequestType表中的RequestTypeID列,但出现如下错误。

 SQLSTATE[HY000]: General error: 1215 Cannot add foreign key constraint (SQL: alter table `Request` add constraint `request_requesttypeid_foreign` foreign key (`RequestTypeID`) references `DefRequestType` (`RequestTypeID`))

我们通过将表引擎修复为MyISAM 来解决此问题,但我们希望将表引擎用作InnoDB。此外,我们正在 Laravel 8 版本中尝试迁移过程。首先我创建 DefRequestType 表,然后创建 Request 表。我后来在 DefRequestType 表中将 DefRequestTypeID 列的值更改为 bigIncrements 的原因是为了在 DefRequestType 表中分配两个 primaryKey。我还希望能够为 DefRequestTypeID 列提供一个额外的 autoIncrement 属性。

请求表

Schema::create('Request', function (Blueprint $table) 
   $table->bigIncrements('RequestID');
   $table->unsignedBigInteger('RequestTypeID')->nullable(); <----------------------------
   $table->unsignedInteger('CustomerID')->nullable();
   $table->unsignedInteger('ApplicationID')->nullable();
                
   $table->foreign('RequestTypeID')
         ->references('RequestTypeID')
         ->on('DefRequestType');
   $table->foreign('ContentID')
         ->references('ContentID')
         ->on('Content');
);

DefRequestType 表

Schema::create('DefRequestType', function (Blueprint $table) 
   $table->unsignedInteger('DefRequestTypeID');
   $table->unsignedBigInteger('RequestTypeID'); <----------------------------
   $table->string('RequestDefinition');
   $table->integer('Status')->default(1);
   $table->integer('OldID');
   $table->primary(['DefRequestTypeID','RequestTypeID']);
);

Schema::table('DefRequestType', function (Blueprint $table) 
   $table->bigIncrements('DefRequestTypeID')->change();
);

如果您能提供帮助,我们将不胜感激。

【问题讨论】:

首先,表格的命名约定以及大整数和普通整数之间的混合使得这种方式比它必须的更加混乱。其次,为什么要创建 DefRequestTypeId 或 DefRequestType 表,然后将其更改为主键? 你对表的命名是对的,有一个不标准的用法,以前在项目上工作的人是这样创建的,不幸的是,在这个阶段改变它会使项目变得困难.我稍后将 DefRequestTypeID 列设置为 bigIncrements 的原因是我想分配多个 primaryKey,并且我能够将 DefRequestTypeID 列设置为 autoIncrement。 【参考方案1】:

问题在表DefRequestTypeDefRequestTypeID 是一个普通整数。在外键上,RequestTypeID 是一个大整数。

要解决此问题,请将RequestTypeID 更改为普通整数或将DefRequestTypeID 更改为大整数。

编辑

我会将其更改为以下内容。

 $table->unsignedBigInteger('DefRequestTypeID');

【讨论】:

对不起,我想我无法表达自己。我正在将 DefRequestType 表中的 DefRequestTypeID 字段更改为下面的一个大整数。我的问题是将 Request 表中的 RequestTypeID 列映射到 DefRequestType 表中的 RequestTypeID 列。另外,正如你所说,我将 RequestTypeID 列更改为整数并再次尝试,我遇到了同样的错误。 由于大增量的变化,我觉得 DefRequestTypeID 应该是请求表中的一个大整数 很遗憾,我们尝试按照您所说的运行代码,但遇到了同样的错误。同样,我们在 RequestTypeID 列中分配了 unsignedBigInteger 类型,但错误没有改变。

以上是关于Laravel 8 de迁移过程中的外国错误[重复]的主要内容,如果未能解决你的问题,请参考以下文章

laravel迁移文件

Laravel迁移不完整[重复]

Laravel 5.6.17 php artisan 迁移错误与 php 7.2 [重复]

Laravel 5.4数据库迁移不起作用[重复]

使用 XAMPP 的 Laravel 迁移错误:[PDOException] 找不到驱动程序 [重复]

无法使用 Laravel 迁移 [重复]