# #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.