我有两个模型使用 GORM 和 Postgres 13 绑定到同一个表,一个显示用于管理员的额外属性(并创建表结构),另一个模型用于在 GraphQL 中公开简化版本。使用 GORM 建立多对多关系。它们共享相同的表products和关系表product_countries。
type Product struct {
// Product ID
ID int `json:"id"`
// ... more properties ...
Countries []*Country `json:"countries" gorm:"many2many:product_countries;"` // Array containing the countries where the product can be found
}
type ProductAdmin struct {
// Product ID
ID int `json:"id"`
// ...more properties...
// Array containing the countries where the product can be found
Countries []*Country `json:"countries" gorm:"many2many:product_countries;"`
}
type Country struct {
// Country ID
ID string `json:"id" gorm:"primaryKey"`
// Products available in the country
Products []*Product `json:"products" gorm:"many2many:product_countries;"`
// Products Admin Model
ProductsAdmin []*ProductAdmin `json:"products" gorm:"many2many:product_countries;"`
}
我添加了这段代码,以便它们使用同一个表,到目前为止,所有 CRUD 操作都可以完美运行。
func (ProductAdmin) TableName() string {
return "products"
}
但是当我想要 .Preload("Countries") 时,我收到以下错误,这是有道理的,因为 gorm 自己将表重命名为products_admin。
var products []*model.ProductAdmin
err := query.Order("id").Preload("Countries").Find(&productsAdmin).Error
ERROR: column product_countries.product_admin_id does not exist (SQLSTATE 42703)
有没有办法覆盖这个重命名或用某种标签指定它?我需要它成为product_id。