首页 > 解决方案 > 将“错误”外键迁移到“正确”外键的最佳方法?

问题描述

就上下文而言,我有一个 Laravel 6 项目,委婉地说,当我继承它时,它做出了一个相当奇怪的选择,关于如何管理关系。

我有一个用户对象,它具有通常的自动增量 ID,以及由外部系统提供的“system_id”。

对于大多数项目,涉及用户对象的关系使用它们的“id”字段作为关系的 belongsTo() 部分中的外键,这一切都很好。

但是,一种多对多关系,特别是用于用户模型和组模型之间关系的关系,使用用户模型的“system_id”字段作为外键,而不是在其他任何地方使用的通常的“id”字段。开始引起各种开发头痛,并且已经投入生产。

因此,作为系统清理项目的一部分,我打算迁移数据透视表以使用用户模型的“id”字段。现在的挑战如下:

  1. 以与数据库无关的方式,如何将匹配的 id 复制到给定已知“system_id”的数据透视表中的“user_id”外键字段。

  2. 它在迁移中会是什么样子?迁移甚至是一个不错的选择,还是应该直接在数据库中完成?

  3. 还有什么我应该解释的吗?

  4. 这首先是一个好主意还是我们应该接受它?

显然,将进行备份,并且将首先在测试环境中对整个事物进行测试,然后再尝试将其投入生产。

标签: mysqllaravel-6

解决方案


推荐阅读