One-to-many association get data from the one table

Issue

I’m new to Golang and Gorm, and I couldn’t find the anwswer. In a rest api, I want my json to come with values from the one table relation.

type Product struct {
    gorm.Model   
    Name             string       
    Description      string       
    Weight           string
    TypeID           uint
}
type Type struct {
    ID                   string         `gorm:"primaryKey;"`
    Name                 string
    Product              []Product

}

and I want my Product json to come with the ID and Name from Type.
but this doesn’t work.

var product Product
id:=1
db.Preload("Type").First(&product, id)

Do I have to do something like this in the struct?

type Product struct {
    gorm.Model   
    Name             string       
    Description      string       
    Weight           string
    Type             Type 
}

Solution

If you want to load Type.ID and Type.Name into Product.ID and Product.Name, you need to specifically select fields from two tables:

var product Product
id:=1
db.Joins("JOIN types ON types.id = products.type_id"). Select("types.id, types.name, products.description, products.weight, products.type_id").First(&product, id)

If you want to separate Type fields into a separate field in the Product struct, you need to make the following changes:

type Product struct {
    gorm.Model   
    Name             string       
    Description      string       
    Weight           string
    TypeID           uint
    Type             Type 
}

var product Product
id:=1
db.Preload("Type").First(&product, id)

Here, all of the Type fields will be loaded into the Product.Type field.

Answered By – Emin Laletovic

Answer Checked By – Mary Flores (GoLangFix Volunteer)

Leave a Reply

Your email address will not be published.