Gorm自动化可能不工作,因为我认为它应该?



我已经使用Gorm一年了,它一直工作得很好。然而,我正在尝试重构我的数据库模式,由于某种原因,Gorm没有像预期的那样迁移。我的应用程序是一个多租户应用程序,所以我有一个客户端id的概念,它使用POSTGRES Db ("PostgreSQL 13.3 on x86_64-pc-linux-gnu,由Debian clang版本10.0.1编译,64位")。问题是,我愚蠢地用我们公司名称的前缀来命名我的一些结构/列,让我们称公司为COM。因此,例如,我的客户端结构是COMClient,现在它只是client(为了简单起见,我已经删除了一些数据)

type Client struct {ID字符串的名字 字符串地址字符串}

然后我有了一个如下的Base结构体BaseClient struct {ID字符串ClientID stringgorm:"type:uuid"

客户端*客户端}同样,基结构体有COMClientID和COMClient字段。这个基本客户端结构将在所有其他结构中使用,在这些结构中,我需要有一个指向客户端表的外键。例如,我的用户结构是:

type ClientUser struct {BaseClientFirstName字符串LastName字符串邮件字符串gorm:"uniqueIndex"密码字符串}

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

db.AutoMigrate(和客户端{})db.AutoMigrate(和ClientUser {})等等…

问题是,并不是在每个具有客户表外键的表中都创建列client_id。这些表都有旧客户端表'com_clients'的外键。

然而,如果我在一个新的数据库上运行我的整个迁移,一切都被创建,因为它应该…

我已经绞尽脑汁好几个小时了,为什么有些表创建了这个列,而有些表没有。

谢谢

好吧,这有点尴尬,但我知道我的问题了…我只是发这个,以防别人犯同样的错误。

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

当我决定使用Gorm时,我决定使用他们的约定,然而,如果你犯了一个打字错误(就像我一样),事情将无法工作。

应该是非常简单的ClientID字符串客户*客户

我做了什么ClientID字符串Clent *客户

我忘了client里的I。

相关内容

  • 没有找到相关文章

最新更新