🧷

GORMv2で外部キーが生成されない

2023/11/21に公開

原因は「所有側」で定義する必要があったこと。
外部キーを作成するのは「所有される側」だがGoの構造体定義上は「所有側」で定義する。

type User struct {
	UserID string
	// foreignKeyにはCreditCardで外部キーを作る列、referencesにはUserの参照列を指定する
	CreditCards []CreditCard `gorm:"foreignKey:UserID;references:UserID"`
}

type CreditCard struct {
	CreditCardID string
	UserID       string
}
// gorm.Modelを使う場合は↓でOK、公式ドキュメントより
type User struct {
	gorm.Model
	CreditCards []CreditCard
}

type CreditCard struct {
	gorm.Model
	UserID uint
}

参考:
https://gorm.io/ja_JP/docs/has_many.html

Discussion