【问题标题】:Gorm AutoMigrate Possibly Not Working As I Think it Should?Gorm AutoMigrate 可能不像我认为的那样工作?
【发布时间】:2021-08-13 21:06:59
【问题描述】:

我已经使用 Gorm 一年了,它一直运行良好。但是,我正在尝试重构我的数据库架构,并且由于某种原因,Gorm 没有按预期迁移。我的应用程序是一个多租户应用程序,所以我有一个客户端 ID 的概念,它使用 POSTGRES Db(“PostgreSQL 13.3 on x86_64-pc-linux-gnu,由 Debian clang 版本 10.0.1 编译,64 位” )。问题是我愚蠢地用我们公司名称的前缀命名我的一些结构/列,让我们称之为公司 COM。因此,例如,我的客户端结构 WAS COMClient,现在它只是客户端(为简单起见,我删除了一些数据)

类型客户端结构{ 标识字符串 名称字符串 地址字符串 }

然后我有一个 Base 结构如下 类型 BaseClient 结构 { 标识字符串 ClientID 字符串gorm:"type:uuid" 客户 *客户 }

同样,基本结构具有 COMClientID 和 COMClient 字段。这个基本客户端结构将用于我的所有其他结构,我需要将外键返回到我的客户端表。例如, 我的用户结构是:

类型 ClientUser 结构 { 基础客户端 名字字符串 姓氏字符串 电子邮件字符串gorm:"uniqueIndex" 密码字符串 }

简而言之,我正在重构 COMClient => Client。然后,当应用程序启动时,我会迁移所有结构,如下所示:

db.AutoMigrate(&Client{}) db.AutoMigrate(&ClientUser{}) 等等……

问题在于,没有在每个具有客户端表外键的表中创建列 client_id。这些表都有旧客户端表“com_clients”的外键。

但是,如果我在一个新的数据库上运行我的整个迁移,一切都会按原样创建...

几个小时以来,我一直在琢磨为什么有些表创建了列而有些没有。

谢谢

【问题讨论】:

    标签: go go-gorm


    【解决方案1】:

    好的,这有点尴尬,但我发现了我的问题......我只是发布这个,以防其他人犯同样的错误。

    如果您的数据库未按预期迁移,请使用 Debug() 运行 AutoMigrate,因此使用 db.Debug().AutoMigrate(tables...)。

    当我决定使用 Gorm 时,我决定使用他们的约定,但是,如果你打错字(就像我一样),一切都将无法正常工作。

    应该 - 非常简单 客户 ID 字符串 客户 *客户

    我做了什么 客户 ID 字符串 客户*客户

    我忘记了客户端中的“i”。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-09-29
      • 1970-01-01
      • 1970-01-01
      • 2015-05-16
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多