当前位置: 首页 > 面试题库 >

为什么GORM无法生成外键?

史英飙
2023-03-14
问题内容

我正在尝试在Password表上创建一个外键,该键必须指向表id内的User列。但是当我尝试以下操作时,它不起作用。将foreign key不会产生。它只是user_idpassword表内添加列名。

package schema

import (
"github.com/jinzhu/gorm"
_ "github.com/jinzhu/gorm/dialects/mysql"
)

type User struct {
    gorm.Model
    FirstName string `gorm:"not null"`
    LastName string `gorm:"not null"`
    Email string `gorm:"type:varchar(100);unique_index"`
    IsActive bool `gorm:"not null"`
    IsVerified bool `gorm:"not null"`
}

type Password struct {
    gorm.Model
    Password string `gorm:"not null"`
    UserId int `gorm:"not null"`
    User User `gorm:"foreignkey:UserId;association_foreignkey:id"`
}


func SyncDB(db *gorm.DB) {

    db.AutoMigrate(&User{})
    db.AutoMigrate(&Password{})
}

我究竟做错了什么?如何在Password表内部使外键指向User表?


问题答案:

我认为您需要:

db.Model(&Password{}).AddForeignKey("user_id", "users(id)", "RESTRICT", "RESTRICT")

我把我的自动迁移声明放在这样

db.AutoMigrate(&User{}, &Password{})
db.Model(&Password{}).AddForeignKey("user_id", "users(id)", "RESTRICT", "RESTRICT")

让我知道是否有帮助。



 类似资料:
  • 问题内容: 在我的应用程序中,我使用ScheduledExecutorService,但仅产生一个线程来处理计划的任务。这是因为ScheduledExecutorService不会生成线程来处理待处理的任务吗? 这是一个代码片段,将仅输出“ run()1”,而不是预期的“ run()1”,后跟“ run()2” …“ run()10”。 问题答案: 只有一个线程,因为您使用创建线程池,这意味着该线

  • 问题内容: 我有一个在目录下生成源的插件。它被连接到generate- sources阶段,如下所示: 问题是,当我使用文件时,文件将不会放在罐子中。我在那里看到所有文件,但没有。 我阅读了有关此问题的所有问题,但不知道如何解决该问题。我正在使用Maven3.0.x。 问题答案: build-helper插件确实解决了这个问题。感谢@Joe的评论。

  • 问题内容: 当我与某些IRC服务器(而非其他IRC服务器)建立SSL连接时(大概是由于服务器的首选加密方法),出现以下异常: 最终原因: 演示此问题的服务器示例是(这是一个IRC服务器)。未显示问题的服务器的示例是。[不足为奇的是,每个网络上的所有服务器都共享相同的行为。] 我的代码(如所述,在连接到某些SSL服务器时有效)是: 是最后一个startHandshake引发异常。是的,’trustA

  • 服务器:版本:1.12.6 API版本:1.24 Go版本:Go1.6.3 Git提交:78D1802 build:Tue Jan 31 23:47:34 2017 OS/arch:linux/amd64 Docker--Version docker Version1.12.6,构建78D1802 docker-compose-版本docker-compose版本1.5.2,构建未知

  • 问题内容: 我正在尝试从以下创建的结构中打印json结果: 并打印出来 但是,结果仅返回{} 其次,我尝试将单词的第一个字母更改为大写,如下所示: 而且有效!无论如何,为什么前面没有小写字母的单词呢? 问题答案: Go用例确定在您的包上下文中特定标识符是公共标识符还是私有标识符。在您的第一个示例中,该字段不可见,因为它不是包含代码的包的一部分。当您将字段更改为大写时,它们变为公共字段,因此可以导出

  • 主要内容:生成森林在学习 连通图的基础上,本节学习什么是 生成树,以及什么是 生成森林。 对连通图进行遍历,过程中所经过的边和顶点的组合可看做是一棵普通树,通常称为 生成树 。 图 1 连通图及其对应的生成树 如图 1 所示,图 1a) 是一张连通图,图 1b) 是其对应的 2 种生成树。 连通图中,由于任意两顶点之间可能含有多条通路,遍历连通图的方式有多种,往往一张连通图可能有多种不同的生成树与之对应。 连通图中