Postgres 13 で GORM を使用して同じテーブルにバインドする 2 つのモデルがあります。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になる必要があります。