0

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になる必要があります。

4

0 に答える 0