go - 在 GORM 中创建关联记录?

标签 go go-gorm

我正在做一个项目,对 Golang 还比较陌生。我正在为我的数据库 ORM 使用 GORM。我不知道我做错了什么,但我无法创建关联记录。

type (
    Task struct {
        gorm.Model
        Title       string    `json:"title"`
        Description string    `json:"description"`
        Priority    Priority  `json:"priority_id" validate:"required" gorm:"foreignkey:PriorityID"`
        PriorityID  uint
    }

    Priority struct {
        gorm.Model
        Name      string     `json:"name"`
    }
)

当我这样做的时候

task := Task{
    Title:       "Test Task!",
    Description: "Test Task Description",
    Priority:    Priority{ID: 1},
}
db.Create(&task)

它抛出这个错误:

[2019-07-27 18:34:35] sql: converting argument $7 type: unsupported type models.Priority, a struct

我看过GORM Associations但无法真正找到任何可以使其发挥作用的解决方案。

最佳答案

嗨,我想我来晚了,但看看这个错误是优先级结构的问题。

而且我认为您不必提及外键(我假设 gorm 会接受它),因此您可以通过删除外键并让 gorm 选择一个来轻松解决此问题,它应该可以正常工作

这是我的例子

type Task struct {
        gorm.Model
        Title       string
        Description string
        Priority    Priority
        PriorityID  uint
}

type Priority struct {
        gorm.Model
        Name string
}

func main() {
        db, err := gorm.Open(sqlite.Open("test.db"), &gorm.Config{})
        if err != nil {
                panic("failed to connect database")
        }

        db.AutoMigrate(&Task{}, &Priority{})

        task := Task{
                Title:       "Test Task!",
                Description: "Test Task Description",
                Priority:    Priority{ID: 1},
        }
        db.Create(&task)

        var tasks []Task
        db.Joins("Priority").Find(&tasks)
        fmt.Println(tasks)
}

关于go - 在 GORM 中创建关联记录?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57234111/

相关文章:

go - golang中的多维数组

go - 如何使用反射附加到 slice ?

go - 从 strings.Replace() Golang 倒置返回

go - 在 Go 中检测根 x509 证书

go - 如何正确定义 gorm 数据库接口(interface)?

go - 如何用 gorm 填充和嵌入数组?

go - 从数据库中保存和读取 Golang 中的 byte[]

go - 您可以通过 json 键字段动态迭代 Go 中的结构字段吗?

mysql - GORM 在选择中使用显式列名

mysql - 如何在GORM上使用mysql Union All?