Gorm 关联语法解惑

Photo by Lerone Pieters on Unsplash

Gorm 关联语法与我的常识有冲突,导致尝试他的关联语法花了一些时间。最终结果如下

type CrawlResult struct {
	Crawler     Crawler   `gorm:"foreignKey:CrawlerId;references:CrawlerId"`
	CrawlerId   string    `json:"crawlerId" gorm:"column:crawler_id"`
}
type Crawler struct {
	CrawlerId string `gorm:"primaryKey;column:crawler_id"`
}

可以看到,在外键存在的表需要自己设定一个外键,这里是 CrawlerId,同时需要将对应结构体 Crawler 作为属性聚合在其中。这里 foreignKey 是指 CrawlResult 本体结构的属性 CrawlerId,references 指的是 Crawler 的外键。然后你在关联的时候可以直接这样做

db.Preload("Crawler").Find(&results)

这里 Preload 指的是外部结构名称。

总结

内部实体的外键要自己建立,然后用foreignKey关联才行。