I'm trying to work with postgresql and gorm but I'm encountering the following problem. I have two structs (Tenantx
,Userx
) with a many2many relationship (this works) plus a field in each one (TenantAdmin
,DefaultTenant
) which relates to the other struct. Saving and Updating works with all fields except for TenantAdmin
and DefaultTenant
. When I save a Tenantx
object, the TenantAdmin
field won't be saved, and updating it won't work (see Output). There are no errors thrown. I would like to know what am I doing wrong here.
Thanks in advance.
package models
type Tenantx struct {
ID uint `gorm:"primary_key"`
Name string `gorm:"not null;unique"`
TenantAdmin Userx
Users []Userx `gorm:"many2many:tenantx_userx;"`
}
type Userx struct {
ID uint `gorm:"primary_key"`
Username string `gorm:"not null;unique"`
DefaultTenant *Tenantx
Tenants *[]Tenantx `gorm:"many2many:tenantx_userx;"`
}
main.go
func main() {
var err error
repo.DB, err = gorm.Open("postgres", "host=xxx user=xxx dbname=xxx sslmode=disable password=xxx")
if err != nil {
panic("failed to connect database")
}
defer repo.DB.Close()
repo.DB.CreateTable(&models.Tenantx{}, &models.Userx{})
tenant1 := models.Tenantx{
Name: "newtenant",
TenantAdmin: models.Userx{Username: "usertest"}, //--> Doesn't work
}
user1 := models.Userx{Username: "user1"}
user2 := models.Userx{Username: "user2"}
repo.DB.Save(&tenant1)
//Update
repo.DB.Model(&tenant1).Association("Users").Append([]*models.Userx{&user1})
repo.DB.Model(&tenant1).Association("Users").Append([]*models.Userx{&user2})
repo.DB.Model(&tenant1).Association("TenantAdmin").Append(user1) //<--Doesn't work
//Search and Print
var gettenant models.Tenantx
var getuser []models.Userx
repo.DB.First(&gettenant, "name = ?", "newtenant")
fmt.Println(gettenant)
repo.DB.Model(&gettenant).Related(&getuser, "Users")
gettenant.Users = getuser
fmt.Println("1 --> ", gettenant)
}
Output
1 --> {1 newtenant {0 <nil> <nil>} [{1 user1 <nil> <nil>} {2 user2 <nil> <nil>}]}