I have 2 simple entities, User has many Assets:
type User struct {
UserId int `gorm:"PRIMARY_KEY"`
Email string `gorm:"column:email"`
FirstName string `gorm:"column:firstname"`
LastName string `gorm:"column:lastname"`
Assets []Asset `gorm:"foreignkey:user_id"`
}
type Asset struct {
AssetId int `gorm:"PRIMARY_KEY"`
UserId int `gorm:"column:user_id"`
Slug string `gorm:"column:slug"`
Address string `gorm:"address"`
}
I want to get a user by the primary id and also collect the assets.
Following the documentation here: http://doc.gorm.io/associations.html#has-many I did the following which gives me an empty array although there are records:
var user app.User
var assets []app.Asset
err := r.DB.Where("user_id = ?", userId).First(&user).Error
if err != nil {
return nil, err
}
r.DB.Model(&user).Related(&assets)
Changing from:
r.DB.Model(&user).Related(&assets)
to:
r.DB.Model(&user).Related(&user.Assets)
I retrieve a single Asset because GORM is retrieving by asset_id instead of by user_id for some reason. (so if the user_id is 10, it is getting an asset with asset_id -> 10)
What is the correct way to handle the relationship in this case ?