Has Many
A has many
association sets up a one-to-many connection with another model, unlike has one
, the owner could have zero or many instances of models.
For example, if your application includes users and credit card, and each user can have many credit cards.
// User has many CreditCards, UserID is the foreign key |
Override Foreign Key
To define a has many
relationship, a foreign key must exist. The default foreign key’s name is the owner’s type name plus the name of its primary key field
For example, to define a model that belongs to User
, the foreign key should be UserID
.
To use another field as foreign key, you can customize it with a foreignKey
tag, e.g:
type User struct { |
Override References
GORM usually uses the owner’s primary key as the foreign key’s value, for the 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 references
, e.g:
type User struct { |
Polymorphism Association
GORM supports polymorphism association for has one
and has many
, it will save owned entity’s table name into polymorphic type’s field, primary key value into the polymorphic field
type Dog struct { |
You can change the polymorphic type value with tag polymorphicValue
, for example:
type Dog struct { |
CRUD with Has Many
Please checkout Association Mode for working with has many relations
Eager Loading
GORM allows eager loading has many associations with Preload
, refer Preloading (Eager loading) for details
Self-Referential Has Many
type User struct { |
FOREIGN KEY Constraints
You can setup OnUpdate
, OnDelete
constraints with tag constraint
, it will be created when migrating with GORM, for example:
type User struct { |