Has Many
has many
アソシエーションは他のモデルとのone-to-manyなつながりを表します。has one
とは異なり、親は0もしくは多のモデルのインスタンスを持ちます。
例えば、あなたのアプリケーションにおいて、userとcredit cardモデルがあり、それぞれのuserがたくさんのcredit cardを所有していたとします。
// User has many CreditCards, UserID is the foreign key |
Foreign Key
has manyの関係を定義する場合、外部キーが必ず存在します。デフォルトの外部キーの名前は、参照されるモデルの名前と主キーの名前を結合したものになります(例えば、UserIDやCardIDなど)。
上述の例では、User
に属するモデルを定義する場合、外部キーは UserID
にします。
外部キーとして他のフィールドを使う場合、foreignkey
タグを使用してカスタマイズすることができる。たとえば、
type User struct { |
Association ForeignKey
GORM usually uses the owner’s primary key as the foreign key’s value, for above example, it is the User
‘s ID
,
When you assign credit cards to a user, GORM will save the user’s ID
into credit cards’ UserID
field.
You are able to change it with tag association_foreignkey
, e.g:
type User struct { |
Polymorphism Association
GORM supports polymorphic has-many and has-one associations.
type Cat struct { |
Note: polymorphic belongs-to and many-to-many are explicitly NOT supported, and will throw errors.
Working with Has Many
You could find has many
associations with Related
db.Model(&user).Related(&emails) |
For advanced usage, refer to Association Mode