0

我有两个模型使用 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

4

0 回答 0