Переименование столбца о многих отношениях 2many в горме

# #go #go-gorm #postgresql-13

Вопрос:

У меня есть две модели, которые привязываются к одной и той же таблице с помощью 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"
}
 

Но когда я захочу .Предварительная загрузка(«Страны») Я получаю следующую ошибку, которая имеет смысл, поскольку gorm самостоятельно переименовывает таблицу в products_admin.

 var products []*model.ProductAdmin
err := query.Order("id").Preload("Countries").Find(amp;productsAdmin).Error
 

ERROR: column product_countries.product_admin_id does not exist (SQLSTATE 42703)

Есть ли способ переопределить это переименование или указать его с помощью какого-либо тега? Мне нужно, чтобы он стал product_id.