gpt4 book ai didi

postgresql - 无法使用 gorm Postgresql 设置外键

转载 作者:IT王子 更新时间:2023-10-29 01:44:34 25 4
gpt4 key购买 nike

我正在使用 jinzhu/gorm 构建一个 Golang 后端我在尝试建立两个表之间的关系时遇到了一些麻烦,例如ItemsManufacturers 使用外键。

我正在执行 jinzhu.me/gorm/models 中的步骤但老实说,我对手动编写表格等更直接的方法感到困惑,例如,使用 go pq .

item.go:

package model

import "github.com/jinzhu/gorm"

type Item struct {
gorm.Model
Item string `gorm:"primary_key"`
Manufacturer Manufacturer `gorm:"ForeignKey:Name"`
}

ma​​nufacturer.go:

package model

import "github.com/jinzhu/gorm"

type Manufacturer struct {
gorm.Model
Name string `gorm:"primary_key"`
}

我没有收到任何错误或警告。检查我的表时,我发现没有创建相关性。项目没有制造商字段。

到目前为止我尝试了什么:

  • 没有显式写入 gorm:"ForeignKey:Name" 因为 Manufacturer 字段已经是 Manufacturer
  • 编写 gorm:"ForeignKey:Name;AssociationForeignKey:Name"
  • 手动将它们与 db.Model(&model.Item{}).Related(&model.Manufacturer{})
  • 相关联
  • 手动将它们与 db.Model(&model.Item{}).Related(&model.Manufacturer{}, "Manufacturer")
  • 相关联
  • 手动将它们与 db.Model("items").Related("manufacturers") 相关联。即使它们的模型名称是单数,它们也会在 Postgresql 上使用此名称创建。

编辑:

尝试类似的东西

type Item struct {
Item string `gorm:"primary_key"`
Manufacturer Manufacturer
ManufacturerID int
}

type Manufacturer struct {
ID uint
Name string
}

导致相同的结果。没有创建外键,我可以插入具有不存在的 Manufacturer 的新项目。

我做错了什么?我错过了什么吗?

最佳答案

你必须做类似的事情:

type Item struct {
gorm.Model
Item string `gorm:"primary_key"`
ManufacturerName string `sql:"type:varchar REFERENCES manufacturers(name)"`
Manufacturer Manufacturer `gorm:"ForeignKey:ManufacturerName;AssociationForeignKey:Name`
}

告诉它 a) 使用 ManufacturerName 作为外键,B) 在另一个表上使用 Name。

或者你可以这样做:

type Item struct {
gorm.Model
Item string `gorm:"primary_key"`
ManufacturerID uint `sql:"type:uint REFERENCES manufacturers(id)"`
Manufacturer Manufacturer `gorm:"ForeignKey:Man;AssociationForeignKey:Name"`
}

关于postgresql - 无法使用 gorm Postgresql 设置外键,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46697365/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com