即使没有添加外键也无法添加外键约束

Posted

技术标签:

【中文标题】即使没有添加外键也无法添加外键约束【英文标题】:Cannot Add Foreign Key Constraint even no foreign keys are added 【发布时间】:2021-12-14 03:23:14 【问题描述】:

Laravel 8

由于某种原因,我的暂存环境不允许我运行迁移。

我收到以下错误。

General error: 1215 Cannot add foreign key constraint (
SQL: create table `login_credentials` (
`id` char(36) not null, 
`username` varchar(75) not null, 
`confirmation_code` varchar(36) null, 
`deleted_at` timestamp null, 
`remember_token` varchar(100) null, 
`created_at` timestamp null, 
`updated_at` timestamp null) 
default character set utf8mb4 
collate 'utf8mb4_unicode_ci' 
engine = InnoDB)

我还没有定义任何外键,这似乎是最近才开始的。我为我的应用程序编写了单元测试,所以我的大部分开发都是在本地完成的。

在我推送到生产之前,我很少会上传到登台服务器以进一步测试更详细的内容。如果它是一个小的可协商更改,那么一旦单元测试通过并验证干净的构建,它将从本地转到生产。所以不幸的是,从现在到几周前,这成为了一个问题。

我的 login_credentials 迁移文件。

class CreateLoginCredentialsTable extends Migration


    public function up(): void
    
        Schema::create('login_credentials', function (Blueprint $table) 
            $table->uuid('id')->nullable(false)->unique()->primary();
            $table->string('username',75)->unique();
            $table->string('confirmation_code',36)->nullable()->unique();
            $table->softDeletes();
            $table->rememberToken();
            $table->timestamps();
        );
    


我在 *** 上搜索了高低,并尝试了以下方法。

验证我的用户 id 列在任何地方都作为 uuid 匹配。 验证数据库是 InnoDB 验证没有在任何迁移中定义外键 验证迁移文件的执行顺序是否正确 将作曲家更新为最新的依赖项/版本。 运行所有 artisan 命令以清除缓存、会话、路由、视图等。 当 tbl 的 id 是 uuid 时,验证我的模型是 $incrementing = false。 将 laravel 迁移文件移动到我的迁移文件夹中,并将 Cashier::ignoreMigrations(); Passport::ignoreMigrations(); 添加到我的 appserviceprovider 并更新这些迁移文件以确保 user_id 不是 bigInt 或 Int,并定义为 uuid。 编写一个 trait 以确保 laravel 知道 id 是一个 uuid。

在我的本地主机中运行迁移文件运行良好,没有错误。

有什么想法吗?

即使删除了除单个 login_credentials 表之外的所有迁移文件,仍然出现相同的错误?我要疯了吗??

【问题讨论】:

我创建了一个迁移文件并复制了您的架构并运行以从我这里调试它,但它运行时没有错误,i.stack.imgur.com/UIRrw.png,i.stack.imgur.com/A1NND.png,所以现在的问题是,您是什么数据库使用,以及您是如何进行迁移的 运行 composer dump-autoload 并重试 【参考方案1】:

我的暂存数据库和生产数据库在同一个 mysql 服务器上。

来看看,您可以让一个外键约束来自具有相似或相同表的不同数据库,并在您正在处理的数据库上提出此类问题。

回答这个问题,而不是在极少数情况下将其删除,因为其他人将其视为面包屑。

"不能添加外键约束" 检查其他数据库的约束

【讨论】:

以上是关于即使没有添加外键也无法添加外键约束的主要内容,如果未能解决你的问题,请参考以下文章

错误代码:1215。无法添加外键约束(外键)

错误代码:1215。无法添加外键约束(外键)

错误代码:1215。无法添加外键约束(外键)

添加外键约束时出错

MySQL - #1215 - 无法添加外键约束

MySQL 无法添加外键约束