我正在使用jinzhu/gorm构建Golang后端,并且我在尝试在两个表之间 Build 关系时遇到了一些麻烦,例如:使用外键的物品和制造商 .
我正在按照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"`
}
manufacturer.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上使用此名称创建,即使它们的模型名称是单数 .
EDIT :
尝试类似的东西
type Item struct {
Item string `gorm:"primary_key"`
Manufacturer Manufacturer
ManufacturerID int
}
type Manufacturer struct {
ID uint
Name string
}
导致相同的结果 . 没有创建外键,我可以插入不存在的新项目 Manufacturer
.
What Am I doing wrong? Am I missing something?
1 回答
你必须这样做:
告诉它a)使用ManufacturerName作为外键,B)在另一个表上使用Name .
或者你可以这样做: