# Membuat One to Many GORM di Golang

<figure><img src="https://3397141630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVUQUm1GVUT3pDnRHmDRU%2Fuploads%2FZkrDH8KDDKwSK1xFHwUK%2FUntitled.png?alt=media&#x26;token=63fe5026-7a05-421b-8894-b14c75b54aaa" alt=""><figcaption></figcaption></figure>

Membuat one to many di golang dengan framework GORM, langkahnya seperti ini:

Dikasus ini saya buat 1 grade bisa digunakan banyak customer.

![](https://3397141630-files.gitbook.io/~/files/v0/b/gitbook-x-prod.appspot.com/o/spaces%2FVUQUm1GVUT3pDnRHmDRU%2Fuploads%2Fb8CnHUqfA4XcXi9CPfVj%2FUntitled%20\(1\).png?alt=media\&token=60a45c57-6e30-4464-a539-6f5946d688fb)

Buat struct untuk mendeclare sebagai table many seperti ini

```go
type Customer struct {
	gorm.Model
	GradeID uint32 `json:"gradeid"
}
```

dan untuk mendeclare pada table one seperti ini:

```go
type Grade struct {
	gorm.Model
	Customer []Customer `gorm:"foreignKey:GradeID"`
}
```

Sampai sejauh ini kedua table sudah saling terkait, dan langkah selajutnya jika diperlukan kamu bisa ikuti ini untuk migration data.

Migration Data

Buat variable data seperti ini

```go
var grades = []models.Grade{
	models.Grade{
		Name:     "Bronze",
		Category: "Standard",
	},
	models.Grade{
		Name:     "Silver",
		Category: "Standard",
	},
	models.Grade{
		Name:     "Gold",
		Category: "Premium",
	},
}
var customers = []models.Customer{
	models.Customer{
		GradeID: 1,
		Name:    "Park Bo Gum",
		Address: "Nowongu",
		City:    "Namyangju",
		Region:  "Korea Selatan",
	},
	models.Customer{
		GradeID: 2,
		Name:    "Kang Daniel",
		Address: "Ansan",
		City:    "Busan",
		Region:  "Korea Selatan",
	},
}
```

Tambahkan ini pada proses migrate kamu

```
AddForeignKey("grade_id", "grades(id)", "NO ACTION", "NO ACTION")
```

Atau ini sebagai contoh proses migration data

```
seed.Load(server.DB)
server.DB.Debug().AutoMigrate(&models.Grade{}, &models.Customer{})
```

```
//Load function
func Load(db *gorm.DB) {
	err := db.Debug().DropTableIfExists(&models.User{}, &models.Roles{}, &models.Nav{}, &models.Activity{}, &models.Customer{}, &models.Grade{}, &models.Product{}, &models.Cart{}).Error
	if err != nil {
		log.Fatalf("cannot drop table: %v", err)
	}
	err = db.Debug().AutoMigrate(&models.User{}, &models.Roles{}, &models.Nav{}, &models.Activity{}, &models.Customer{}, &models.Grade{}, &models.Product{}, &models.Cart{}).Error
	if err != nil {
		log.Fatalf("cannot migrate table: %v", err)
	}
	for g, _ := range grades {
		err = db.Debug().Model(&models.Grade{}).Create(&grades[g]).Error
		if err != nil {
			log.Fatalf("cannot seed grade table: %v", err)
		}
	}
	for h, _ := range customers {
		err = db.Debug().Model(&models.Customer{}).Create(&customers[h]).AddForeignKey("grade_id", "grades(id)", "NO ACTION", "NO ACTION").Error
		if err != nil {
			log.Fatalf("cannot seed customer table: %v", err)
		}
	}
}
```

Sekian, Gomawo^-^
